恶意跨站脚本(Cross-Site Scripting)的危害想必大家都知道,除了做好服务器端的安全过滤外,现在我们还可以利用一下IE8或者IE9的新的安全特性,那就是跨站脚本筛选器(Cross-Site Scripting Filter)。
对于IE的跨站脚本筛选器可以先参考IEBlog的《IE8 Security Part IV: The XSS Filter》这篇文章做个详细了解。如果IE检测到了跨站脚本攻击,那么IE将对页面做相应的修改以阻止攻击的发生,比如说这里有个示例页面。当我点击Say Hello的时候,IE会将表单的XSS脚本POST到服务端页面,这时IE8及以上浏览器检测到了可能的XSS攻击,于是提示“Internet Explorer 已对此页面进行了修改,以帮助阻止跨站点脚本。”
由此可见微软在IE8及后继浏览器的安全上是下了功夫的,我们如何开启这一特性呢?好消息是这种安全特性默认就是打开的,在IE浏览器的默认、可信和限制区域。对于本地局域网区域(Local Intranet Zone)我们可以通过下面的HTTP header来默认打开这一特性:
X-XSS-Protection: 1
可能有时我们制作的网页并不需要IE为我们多此一举的拦截XSS,因为我们可能就需要提交脚本什么的,如果IE修改了提交内容,也许会给我们带来麻烦,这种情况下我们就需要关闭IE的XSS保护特性,客户端通过IE浏览器 – Internet 选项 – 安全 – Internet – 自定义级别 – 脚本 – 启用XSS筛选器 – 禁用 – 确定:
不过这个只能禁用当前客户端的XSS保护功能,而且会丧失IE对于所有页面的XSS保护,而且你也无法指示用户这样做,所以强烈不推荐这个办法。推荐的办法是:在正常情况下,通过下面的HTTP header,就可以完美的关闭发送这个header的页面XSS保护特性了。
X-XSS-Protection: 0
后来IE团队觉得还可以对XSS做更多的控制,于是对于XSS筛选器增加了一项功能,请看新的HTTP header:
X-XSS-Protection: 1; mode=block
除了紧接X-XSS-Protection后面的1指示IE浏览器打开XSS筛选器外,后面那个mode=block是什么意思呢?其实这段Header的意思是当检测到XSS Attack时,Internet Explorer将停止渲染页面,相比较之前的修改XSS部分代码继续展现内容而言,这里直接发送一个字符#,也就是说整个页面的内容就一个“#”号。这里有个示例页面可供大家测试。
对于ASP.NET我们可以通过修改web.config来配置X-XSS-Protection属性,比如通过下面的配置关闭XSS跨站脚本筛选器:
<system.webServer> <httpProtocol> <customHeaders> <clear /> <add name=" X-XSS-Protection" value="0" /> </customHeaders> </httpProtocol> </system.webServer> |
参考文档
《利用IE8/9浏览器XSS跨站攻击脚本筛选过滤特性(X-XSS-Protection)》有3个想法