概念
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
分类
反射型(非持续型):
一次攻击,将修改好的链接发送给目标用户,让客户点击,达到攻击用户的目的,只能一次性,通过参数提交的方式。
存储型(持续型):
攻击过后,效果会一直存在,直到攻击被删除。比如一条腾讯新闻,将攻击代码插入在评论区,那么后面的用户都可能触发这个xss攻击。,可能是一张图片,用户一旦点击就会访问另一个地址,也许不用点击,只要访问就会触发。存储型危害特别大,特别是社交网站。如果一篇日志,里面有xss攻击代码,很多然转载阅读之后都可能会被盗取cookie。
XSS绕过技术
a.无任何过滤的情况:
测试语句:
b.过滤””等标签的情况:
源代码:
大小写绕过:
c.过滤””等标签,并且考虑大小写的情况:
源代码:
测试语句:
d.过滤关键字”alert”,并且考虑大小写的情况:
源代码:
测试语句:
注意:以上所有情况都需要考虑标签闭合的问题,例如:当程序无任何过滤的时候,插入我们的测试语句,查看页面源代码:
可以发现,测试语句被关在了INPUT标签中,尝试输入如下代码,来跳出INPUT标签,并且闭合后面的引号:
带入到原句中:
Cookie接收脚本实现
触发语句:
xss.html
getcookie.php
防范跨站攻击
对于普通用户而言:
在你的WEB浏览器上禁用java脚本,具体方法,先打开你的IE的internet选项,切换到“安全”页,有个“自定义”级别,点他出现如下窗口,禁用就可以了。但是好象不太可能,因为一旦禁用,很多功能就丧失了,这个方法是下策。还有不要访问包含〈〉字符的连接,当然一些官方的URL不会包括任何脚本元素。
对于开发人员而言:
如果你的站点程序含论坛,留言板,以及其他程序中含提交数据格式的。需要对提交数据进行过滤,如:转换掉“<”和“>”,使用户不能构造Html标记;过滤掉 “:”和“&”,使用户不能将标记的属性设为script;过滤掉空格,使用户不能引发事件机制等。
存储型跨站脚本的用途
插入js文件,将页面重定向到一个其他页面,这个页面可以是仿造原来网站的一个登陆页面,提示用户登录失败,需要重新输入密码登录,进行钓鱼攻击:
a.js中的内容: