利用IE8/9浏览器XSS跨站攻击脚本筛选过滤特性(X-XSS-Protection)

!本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

恶意跨站脚本(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 已对此页面进行了修改,以帮助阻止跨站点脚本。”

XSS跨站脚本筛选器修改跨站脚本

由此可见微软在IE8及后继浏览器的安全上是下了功夫的,我们如何开启这一特性呢?好消息是这种安全特性默认就是打开的,在IE浏览器的默认、可信和限制区域。对于本地局域网区域(Local Intranet Zone)我们可以通过下面的HTTP header来默认打开这一特性:

X-XSS-Protection: 1

可能有时我们制作的网页并不需要IE为我们多此一举的拦截XSS,因为我们可能就需要提交脚本什么的,如果IE修改了提交内容,也许会给我们带来麻烦,这种情况下我们就需要关闭IE的XSS保护特性,客户端通过IE浏览器 – Internet 选项 – 安全 – Internet – 自定义级别 – 脚本 – 启用XSS筛选器 – 禁用 – 确定:

禁用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部分代码继续展现内容而言,这里直接发送一个字符#,也就是说整个页面的内容就一个“#”号。这里有个示例页面可供大家测试。

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>

参考文档

若无特别说明,本网站文章均为原创,原则上这些文章不允许转载,但是如果阁下是出于研究学习目的可以转载到阁下的个人博客或者主页,转载遵循创作共同性“署名-非商业性使用-相同方式共享”原则,请转载时注明作者出处谢绝商业性、非署名、采集站、垃圾站或者纯粹为了流量的转载。谢谢合作!

请稍后...

发表评论

电子邮件地址不会被公开。 必填项已用*标注