IE8 XSS过滤器:它到底做了什么?

时间:2010-01-12 19:12:58

标签: internet-explorer-8 xss

Internet Explorer 8具有新的安全功能,XSS filter试图拦截跨站点脚本尝试。用这种方式描述:

  

XSS Filter是Internet Explorer 8的新功能,可检测URL和HTTP POST请求中的JavaScript。如果检测到JavaScript,则XSS过滤器会搜索反射的证据,如果攻击请求未经更改提交,则会返回到攻击网站的信息。如果检测到反射,则XSS筛选器会清理原始请求,以便无法执行其他JavaScript。

我发现即使没有“反射证据”,XSS过滤器也会启动,并且我开始认为过滤器只是在向另一个站点发出请求并且响应包含JavaScript时才注意到。

但即使这样也难以验证,因为效果似乎来了又去。 IE有不同的区域,就在我认为我已经重现了这个问题时,过滤器不再适用了,我不知道为什么。

任何人都有关于如何打击这个的任何提示?过滤器真的在寻找什么?有没有办法让好人将数据发布到第三方网站,该网站可以返回HTML以显示在iframe中而不会触发过滤器?

背景:我正在从第三方网站加载JavaScript库。 JavaScript从当前HTML页面收集一些数据,并将其发布到第三方网站,第三方网站会响应一些HTML以显示在iframe中。要查看它的实际效果,请访问AOL Food页面,然后点击故事正上方的“打印”图标。

3 个答案:

答案 0 :(得分:56)

它到底是做什么的?它允许第三方链接到您网站的混乱版本。

当[满足一些条件时]启动时它会在查询提交中看到一个字符串,该字符串也在页面中逐字存在,并且它认为可能是危险的。

它假设如果查询字符串和页面代码中都存在<script>something()</script>,那么它必须是因为您的服务器端脚本不安全并且在没有转义的情况下将该字符串直接反映为标记。

但是,除了这是一个完全有效的查询之外,有人可能会巧合地输入匹配,这也是他们匹配的可能性,因为有人查看了页面并故意将其中的一部分复制出来。例如:

  

http://www.bing.com/search?q=%3Cscript+type%3D%22text%2Fjavascript%22%3E

在IE8中跟随它,我成功地破坏了你的Bing页面,因此它会给出脚本错误,并且弹出结果位不起作用。从本质上讲,它会为攻击者提供链接跟踪许可,以挑选和禁用他不喜欢的部分页面 - 甚至可能包括其他与安全相关的措施,如framebuster脚本。

IE8认为“潜在危险”是什么?除了这个脚本标记之外,还有更多更多的陌生事物。 eg。更重要的是,它似乎与使用文本模式系统(可能是正则表达式)的一组“危险”模板匹配,而不是像最终将解析页面本身的任何类型的HTML解析器。是的,使用IE8,你的浏览器正在使用HT̈͜MLw̧̼̜it̏̔h͙r̿e​​̴̬g̉̆e͎x͍͔̑̽̚。

通过查看查询中的字符串,

'XSS protection'是完全虚假。它不能“固定”;这个概念本质上是有缺陷的。除了在不需要的时候踩到它的问题,除了最基本的攻击之外,它无法真正保护你免受任何攻击 - 并且攻击者肯定会在IE8变得更广泛使用的情况下解决这些问题。如果你忘记了正确地逃避HTML输出,你仍然会很脆弱;所有XSS“保护”都为您提供了一种虚假的安全感。不幸的是,微软似乎喜欢这种虚假的安全感;在服务器端,ASP.NET中也有类似的XSS“保护”。

因此,如果你对webapp创作有了一些线索,并且你已经像一个好孩子一样正确地将输出转换为HTML,那么通过输出标题来禁用这种不必要的,不可行的,错误的入侵绝对是一个好主意:

X-XSS-Protection: 0
在您的HTTP响应中

。 (如果您使用的是ASP.NET,请在页面中使用ValidateRequest="false"。)

对于其他人来说,他们仍然在PHP中将字符串拼凑在一起而不需要正确编码......好吧,你也可以将它留在上面。不要指望它真正保护你的用户,但你的网站已经坏了,所以谁关心它是否会破坏一点,对吧?

  

要查看它的实际效果,请访问AOL Food页面,然后点击故事上方的“打印”图标。

啊,是的,我可以在IE8中看到这个突破。没有立即显而易见的是,IE已经阻止了内容阻止了它执行...但我唯一可以看到的跨域请求是XSS过滤器的候选者,这个是http://h30405.www3.hp.com/print/start

POST /print/start HTTP/1.1
Host: h30405.www3.hp.com
Referer: http://recipe.aol.com/recipe/oatmeal-butter-cookies/142275?

csrfmiddlewaretoken=undefined&characterset=utf-8&location=http%253A%2F%2Frecipe.aol.com%2Frecipe%2Foatmeal-butter-cookies%2F142275&template=recipe&blocks=Dd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%28%2B.%2F%2C%28%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk%7Cpspm%3Db3%3Fd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%7D%2F%27%2B%2C.%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk...

blocks参数继续页面更加乱码。据推测,那里有某些东西(巧合?)会反映在返回的HTML中,并触发IE8中关于XSS漏洞看起来像什么的混乱的想法之一。

要解决此问题,HP需要在h30405.www3.hp.com上安装服务器,并包含X-XSS-Protection: 0标题。

答案 1 :(得分:25)

您应该向我(ericlaw @ microsoft)发送您认为不正确的方案的网络捕获(www.fiddlercap.com)。

XSS过滤器的工作原理如下:

  1. 是否为此流程启用了XSSFILTER?
    如果是 - 请继续下一次检查 如果不是 - 绕过XSS过滤器并继续加载
  2. 是“文档”加载(如框架,而不是下载)? 如果是 - 请继续下一次检查 如果不是 - 绕过XSS过滤器并继续加载
  3. 是HTTP / HTTPS请求吗? 如果是 - 请继续下一次检查 如果不是 - 绕过XSS过滤器并继续加载
  4. RESPONSE是否包含x-xss-protection标头? 是: 值= 1:启用XSS过滤器(无排尿检查) 值= 0:禁用XSS过滤器(无折叠检查) 否:继续进行下一次检查
  5. 网站是否在URLAction启用XSS过滤的区域中加载? (默认情况下:Internet,受信任,受限制) 如果是 - 请继续下一次检查 如果不是 - 绕过XSS过滤器并继续加载
  6. 是跨网站请求吗? (Referrer标头:HTTP请求引用标头中的最终(重定向后)完全限定域名是否与要检索的URL的完全限定域名匹配?) 如果是 - 绕过XSS过滤器并继续加载 如果不是 - 那么请求中的URL应该被中断。
  7. 启发式指示RESPONSE数据是否来自不安全的请求数据? 如果是 - 修改响应。
  8. 现在,#7的确切细节非常复杂,但基本上,你可以想象IE将请求数据(URL / Post Body)与响应数据(脚本体)匹配,如果它们匹配,那么响应数据将被修改。

    在您的网站中,您需要查看POST http://h30405.www3.hp.com/print/start的正文以及相应的回复。

答案 2 :(得分:7)

实际上,它比看起来更糟糕。 XSS过滤器可以使安全站点不安全。在这里阅读: http://www.h-online.com/security/news/item/Security-feature-of-Internet-Explorer-8-unsafe-868837.html

从那篇文章:

  

但是,谷歌通过发送X-XSS-Protection:0标头来禁用IE的XSS过滤器,这使它免疫。

我对您的网站了解不足以判断这是否可能是一种解决方案,但您可以尝试一下。 更深入,过滤器的技术讨论以及如何禁用它是:http://michael-coates.blogspot.com/2009/11/ie8-xss-filter-bug.html

相关问题