3.1 XSS简介
(1)跨站脚本攻击:英文全称是Cross Site Script,但是为了和层叠样式表(Cascading Style Sheet, CSS)有所区别,所以在安全领域叫做“XSS”。
(2)XSS攻击:通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。在一开始,这种攻击的演示案例是跨域的,所以叫做“跨站脚本”。
(3)XXS的类型反射型XSS存储型XSSDOM Based XSS
(4)反射型XSS:只是简单地把用户输入的数据“反射”给浏览器。黑客需要诱使用户“点击”一个恶意链接,才能攻击成功。也叫做“非持久型XSS”(Non-persistent XSS).
(5)存储型XSS:具有很强的稳定性,会把用户输入的数据“存储”在服务器端。黑客把恶意的脚本保存到服务器端,所以这种XSS攻击就叫做“存储型XSS”。存储型XSS通常也叫做“持久型XSS”(Persistent XSS),因为从效果上来说,它存在的时间是比较长的。
(6)DOM Based XSS:这种类型的XSS并非按照“数据是否保存在服务器端”来划分,DOM Based XSS从效果上来说也是反射型XSS。单独划分出来,是因为DOM Based XSS的形成原因比较特别,发现它的安全专家专门提出了这种类型的XSS。通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。

3.2 XSS攻击进阶
(1)XSS Payload:XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSS Payload”。
(2)XSS Payload实际上就是JavaScript脚本(还可以是Flash或富客户端的脚本),所以任何JavaScript脚本能实现的功能,XSS Payload都能做到。
(3)强大的XSS PayloadCookie劫持、构造GET与POST请求、XSS钓鱼、识别用户浏览器、识别用户安装的软件、CSS History Hack、获取用户的真实IP地址
(4)XSS攻击平台Attack API,总结了很多能够直接使用的XSS Payload;BeEF,曾经最好的XSS演示平台,可以通过后台控制前端;XSS-Proxy,轻量级的XSS攻击平台,通过嵌套iframe方式实时远程控制被攻击的浏览器。
(5)一般来说,用户之间发生交互行为的页面,若存在存储型XSS,则比较容易发起XSS Worm攻击。
(6)调试JavaScript的工具:Firebug、IE 8 Developer Tools、Fiddler、Http Watch。
(7)XSS构造技巧:利用字符编码、绕过长度限制、使用标签、window.name的妙用。
(8)通过Anehta的回旋镖可以像使用存储型XSS一样使用反射型XSS:将要利用的反射型XSS嵌入一个存储型XSS中
(9)在实现XSS Filter时,禁用、<object>等标签;在网站的应用中将视频文件转码为“flv文件”;如果是动态脚本的Flash,则可以通过Flash的配置参数进行限制。
(10)Javascript框架中曾经出现XSS漏洞的:Dojo、YUI、jQuery。</object>

3.3 XSS的防御
(1)HttpOnly:最早是微软提出的,并在IE6中实现。浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie。解决的是XSS后的Cookie劫持攻击。
(2)Cookie的使用过程:
A)浏览器向服务器发起请求,此时无Cookie。
B)服务器返回时发送Set-Cookie头,向客户端浏览器写入Cookie。
C)在该Cookie到期前,浏览器访问该域下的所有页面,都将发送该Cookie。
(3)输入检查:输入检查的逻辑,必须放在服务器端代码中实现。
(4)输出检查:除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。
(5)XSS攻击主要发生在MVC架构的View层。大部分的XSS漏洞可以在模板系统中解决。
(6)XSS的本质还是一种“HTML注入”,用户的数据被当成了HTML代码一部分来执行,从
(7)在不同场景中的防御方法:在HTML标签中输出HtmlEncode、在HTML属性中输出 HtmlEncode、在script中输出JavascriptEncode、在事件中输出JavascriptEncode、在CSS中输出encodeForCSS()函数、在地址中输出encodeForCSS()函数。
(8)有些时候,网站需要允许用户提交一些自定义的HTML代码,称之为“富文本”
(9)在过滤富文本时,“事件”应该被严格禁止。
(10)在标签的选择上,应该使用白名单,避免使用黑名单。

3.4 小结
(1)XSS漏洞虽然复杂,但是可以彻底解决