IE8 XSSfilter:它真的做了什么?

Internet Explorer 8具有新的安全function,即尝试拦截跨站脚本尝试的XSSfilter 。 这是这样描述的:

XSS筛选器是Internet Explorer 8的新增function,可检测URL和HTTP POST请求中的JavaScript。 如果检测到JavaScript,则XSS筛选searchreflection的证据,如果攻击请求未被更改,则会返回到攻击性网站的信息。 如果检测到reflection,则XSSfilter会清理原始请求,以便不能执行其他JavaScript。

即使没有“reflection证据”,我发现XSSfilter也会启动,并开始认为filter只是在向其他站点发出请求并且响应包含JavaScript时才会发现。

但即使这样也难以validation,因为效果似乎来来去去。 IE有不同的区域,就在我认为我已经重现了这个问题的时候,filter就不再踢了,我不知道为什么。

任何人有任何提示如何解决这个问题? 什么是filter真的在寻找? 有没有什么办法可以让一个好人把数据发布到第三方网站,这个网站可以返回HTML来显示在iframe中而不会触发filter?

背景:我正在从第三方网站加载JavaScript库。 JavaScript从当前HTML页面获取一些数据,并将其发布到第三方站点,该站点响应一些HTML以显示在iframe中。 要看到它在行动,请访问AOL食品页面,然后单击故事上方的“打印”图标。

它真的做了什么? 它允许第三方链接到你的网站的一个混乱的版本。

它在[满足几个条件并且]在查询提交中看到一个也在页面中逐字存在的string,并且它认为可能是危险的时候,它会被踢进。

它假定如果在查询string和页面代码中都存在<script>something()</script> ,那么它必须是因为你的服务器端脚本是不安全的,并且反映出该string直接作为标记返回而不逃脱。

但是,当然,除了事实上,这是一个完全有效的查询,可能是巧合的匹配,也可能是匹配,因为有人看了页面,故意将其中的一部分复制出来。 例如:

');" rel="nofollow ugc">http://www.bing.com/search?q=%3Cscript+type%3D%22text%2Fjavascript%22%3E

跟着在IE8中,我已经成功地破坏了你的必应页,所以它会给脚本错误,popup结果位将无法正常工作。 从本质上讲,它给了一个攻击者,他的链接正在遵循许可证挑选和禁用他不喜欢的页面的部分 – 甚至可能包括其他安全相关的措施,如电影剧本脚本。

IE8认为“潜在危险”是什么? 比这个脚本标签更多,更奇怪的东西。 例如 更重要的是,它似乎与使用文本模式系统(可能是正则expression式)的一组“危险”模板相匹配,而不是像最终parsing页面本身那样的HTMLparsing器。 是的,使用IE8和您的浏览器正在浏览HT̈͜MLw̧̼̜it̏̔h͙r̿e​​̴̬g̉̆e͎x͍͔̑̽̚。

通过查看查询string中的“XSS保护” 完全假的 。 它不能被“固定”; 这个概念本质上是有缺陷的。 除了不需要的时候join的问题,除了最基本的攻击之外,它不能真正保护你,而且攻击者一定会像IE8这样的块变得更加广泛的使用。 如果您忘记正确地转义您的HTML输出,您仍然是脆弱的; 所有XSS“保护”必须为您提供的是一种虚假的安全感。 不幸的是,微软似乎喜欢这种错误的安全感。 在ASP.NET中也有类似的XSS“保护”,在服务器端。

所以,如果你有一个关于webapp创作的线索,而且你已经正确地将输出转义为HTML,那么通过输出标题来禁用这个不需要的,不可行的,错误的入侵是一个好主意。

 X-XSS-Protection: 0 

在你的HTTP响应中 (如果您使用的是ASP.NET,则在页面中使用ValidateRequest="false" 。)

对于其他任何人,仍然在PHP中串起一个串,而没有仔细地编码正确的…好吧,你也可以离开它。 不要指望它实际上保护你的用户,但你的网站已经坏了,所以谁在乎,如果它打破了一点,对吧?

要看到它在行动,请访问AOL食品页面,然后单击故事上方的“打印”图标。

是的,我可以看到这在IE8中打破。 IE并没有立即明确地表示IE浏览器已经停止了内容的执行,尽pipe这是唯一的跨域请求,我可以看到这是一个XSSfilter的候选人是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标头。

你应该给我(ericlaw @ microsoft)一个你认为不正确的情况下的networking捕捉(www.fiddlercap.com)。

XSSfilter的工作原理如下:

  1. 这个过程是否启用了XSSFILTER?
    如果是 – 继续下一个检查如果没有绕过XSSfilter并继续加载
  2. 是“文件”加载(如框架,而不是一个子下载)? 如果是 – 继续下一个检查如果没有绕过XSSfilter并继续加载
  3. 这是一个HTTP / HTTPS请求? 如果是 – 继续下一个检查如果没有绕过XSSfilter并继续加载
  4. RESPONSE是否包含x-xss-protection头文件? 是:值= 1:启用XSSfilter(不进行urlaction检查)值= 0:禁用XSSfilter(不执行检查)否:进入下一个检查
  5. 站点是否在URLAction启用XSS过滤的区域中加载? (默认:Internet,Trusted,Restricted)如果是 – 继续下一个检查如果没有绕过XSSfilter并继续加载
  6. 是一个跨站点请求? (引用标头:HTTP请求引用标头中的最终(后redirect)完全限定域名是否与正在检索的URL的完全限定域名匹配?)如果是 – 绕过XSSfilter并继续加载如果不是 – 则请求中的URL应该被中止。
  7. RESPONSE数据的启发式指示是否来自不安全的请求数据? 如果是 – 修改响应。

现在,#7的具体细节相当复杂,但基本上可以想象,IE对请求数据(URL / Post Body)与响应数据(脚本主体)进行匹配,如果它们匹配,则响应数据将是改性。

在你的网站的情况下,你会想看看POST的正文http://h30405.www3.hp.com/print/start和相应的回应。;

事实上,这比看起来更糟糕。 XSSfilter可以使安全的网站不安全。 请阅读此处: http : //www.h-online.com/security/news/item/Security-feature-of-Internet-Explorer-8-unsafe-868837.html

从那篇文章:

但是,Google通过发送X-XSS-Protection:0头来禁用IE的XSSfilter,这使得它免疫。

我不太了解你的网站,以判断这可能是一个解决scheme,但你可以尝试。 更深入的,filter的技术讨论,以及如何禁用它在这里: http : //michael-coates.blogspot.com/2009/11/ie8-xss-filter-bug.html