Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1-2 xss攻击及预防 #2

Open
fanyuyingbest opened this issue Apr 28, 2021 · 0 comments
Open

1-2 xss攻击及预防 #2

fanyuyingbest opened this issue Apr 28, 2021 · 0 comments

Comments

@fanyuyingbest
Copy link
Owner

XSS攻击(Cross site scripting)

概念

跨站脚本攻击;是一种代码注入攻击,恶意代码未经过滤,与网站代码混在一起,浏览器无法区分哪些脚本是可信的,导致恶意代码被执行;发生的两个步骤就是:有恶意脚本注入,以及恶意脚本被浏览器执行
xss(跨站脚本攻击),分为三种,反射型(非持久型),存储型(持久型),DOM攻击

1-1 反射型(非持久型)

当用户点击一个恶意链接,或提交一个表单,或进入一个恶意网站时,注入脚本进入用户的网站,web服务将执行该脚本;
脚本诱导用户访问一个url,将带有该url的数据传给服务端,服务端将其作为数据处理返回给客户端,浏览器将该段代码解析并执行该脚本,最终完成xss攻击,这种就叫做反身性攻击;
例子:在淘宝等搜索栏,劫持用户的输入操作,并将该关键字用脚本传给服务端,由于后端要返回显示搜索的关键字,作为前端展示,这样就会把被脚本篡改过的关键字返回到页面做渲染,从而执行脚本的代码;

1-2 存储型

脚本被永久性的存储在目标服务器上,当用户请求数据时,脚本从服务器传回并执行。
破坏者将恶意代码存储在服务器上,当浏览器访问数据时,服务器就会将恶意代码直接返回给浏览器,从而执行恶意脚本,完成xss攻击;放射型的都是url上注入代码,存储型都是在服务器上;这种类型的xss是很隐蔽,而且影响面很广,都不需要用户去操作,都会收到影响;
例子:在一些可以发布评论或日志的网页,当用户发的评论没有做过滤,如果一个用户将代码作为发布内容发布,这时,所以其他访问该页面的人,就都会执行该恶意代码;

1-3 DOM型

纯客户端攻击,通过修改客户端代码,受害者浏览器DOM环境发生变化。
通过修改页面的DOM节点,完成攻击;在该类型的攻击中,取出代码及执行代码都是由浏览器完成,属于前端漏洞;
例子:部分展示在页面的订单号,是直接取的url上的某一个参数,如果伪造一个,将该参数的值设置为一段脚本,此时展示的订单编号就是一段代码展示在页面上,只要用户点击,就会执行,从而完成xss攻击;

XSS危害

1-1 盗取用户的cookie、隐私等敏感信息
1-2 劫持浏览器会话,从而执行任意操作,如:转账/发送邮件/转发微博/关注等
1-3 强制弹出弹窗,广告 刷流量等
1-4 传播跨站网页蠕虫,网页挂马等
1-5 结合其他漏洞,如CSRF做进一步操作

预防

1-1 浏览器自身防御能力x-xss-protection
当浏览器检测到xss攻击,可以停止加载页面,可以设置4个值,0-禁止xss过滤 1-启用xss过滤并清除页面; 1 && mode=block停止加载,但是不会清除页面 ; 1 && report= 启用清除并发布违规报告
1-2 转义
在xss攻击时,主要是通过构造一些特殊字符代码来注入脚本,所以就需要对用户的输入做好检测,在客户端和服务端都做好输入检测,然后对用户的输入数据做好转义
主要是对输入的 < 、>、&、%等转义
1-3 过滤
这类主要针对富文本,富文本都是HTML字符串,如果对富文本做转义就会很麻烦,而且会造成乱码,这时就需要过滤;原理就是将一些html标签做白名单处理,根据白名单过滤,以此来防止xss攻击
1-4 内容安全策略 csp:
这类也是白名单策略,开发者告诉客户端,哪些外部资源可以加载和执行,这样大大提升了网页安全性;
主要有两种设置方式:
一种是在http头部设置 content-security-policy,设置的值
一种是在网页的meta标签中设置
<meta http-equiv='content-security-policy' content="script-src 'self' ; object-src 'none';style-src ;child-src https:"/>
脚本: 只信任当前域名
标签: 不信任任何 URL,即不加载任何资源
样式表: 只信任 cdn.example.org 和 third-party.org
页面子内容,如 、<iframe>: 必须使用HTTPS协议加载
其他资源: 没有限制

ps: 参考文档 链接

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant