感谢邱永华先生写出这么好的关于XSS的书!!
《XSS跨站脚本攻击剖析与防御》
一,基础概念
(1)概念
跨站脚本攻击(Cross Site Script)
- 跨站脚本 ( Cross-Site Scriptin ) 是由于Web应用程序对用户的输入过滤不足而产生的.攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端 Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取 Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击.
- ?能注入恶意的 HTML/JavaScript代码到用户浏览的网页上,从而达到劫持用户会话(等同于控制了web客户端)?
- 为什么叫跨站?:在一开始,这种攻击是跨域的,所以叫做"跨站脚本".但是发展到今天,由于 JavaScript的强大功能以及网站前端应用的复杂化,是否跨域已经不再重要.但是由于历史原因,XSS这个名字却一直保留下来
(2)危害
- 网络钓鱼,包括盗取各类用户账号;
- 窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
- 劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
- 强制弹出广告页面、刷流量等;
- 网页挂马;进行恶意操作,例如任意篡改页面信息、删除文章等
- 进行大量的客户端攻击,如DDoS攻击;
- 获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;
- 控制受害者机器向其他网站发起攻击;
- 结合其他漏洞,如CSRF漏洞,实施进一步作恶;
- 提升用户权限,包括进一步渗透网站;
- 传播跨站脚本蠕虫等;
(3)分类
3.1 反射型跨站脚本
反射型跨站脚本( Reflected Cross-site Scripting)也称作非持久型、参数型跨站脚本.
特点
- ① 主要用于将恶意脚本附加到URL地址的参数中
- ② 只在用户单击url时触发,而且只执行一次,非持久化
- ③常用来窃取客户端 Cookies或进行钓鱼欺骗.
- ④常常为通过引诱用户点击一个恶意链接来实施攻击的
3.2 存储型跨站脚本
持久型XSS一般出现在网站的留言、评论、日志等交互处,恶意脚本被存储到客户端或者服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码.
特点
- ① 恶意代码被保存到目标网站的服务器中,每次用户访问时都会执行脚本代码,这种攻击具有较强的稳定性和持久性
- ② 比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全.
- ③ 一般出现在网站的留言、评论、日志等交互处,
(4)发掘
- 数据交互(即输入/输出)的地方最容易产生跨站脚本对网站的输入框、URL参数处进行测试
- 来自COOKIE、POST表单、HTTP头的内容都可能会产生XSS.
二,XSS-filter绕过
(1) 什么时XSS-filter
为了防御跨站脚本攻击,会在Web应用中设计一个 XSS Filter,即跨站脚本过滤器用于分析用户提交的输入,并消除潜在的跨站脚本攻击、恶意的HIML或简单的HTML格式错误等。
- XSS Filter一般是基于黑白名单的安全过滤策略
- 将过滤功能封装在函数中,在处理用户输入时调用这个函数进行过滤