Internet Explorer 8具有新的安全功能,XSS筛选器试图拦截跨站点脚本尝试.用这种方式描述:
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页面,然后单击故事上方的"打印"图标.
它到底是做什么的?它允许第三方链接到您网站的混乱版本.
它在[满足一些条件时]启动并且它在查询提交中看到一个字符串,该字符串也在页面中逐字存在,并且它认为可能是危险的.
它假设如果查询字符串和页面代码都存在,那么它必须是因为您的服务器端脚本不安全并且在没有转义的情况下将该字符串直接反映为标记.
但是,除了这是一个非常有效的查询之外,有人可能会巧合地输入匹配,这也是因为有人看了一下页面而故意将其中的一部分复制出来.例如:
http://www.bing.com/search?q=%3Cscript+type%3D%22text%2Fjavascript%22%3E
在IE8中跟随它,我已成功破坏你的Bing页面,因此它会给出脚本错误,弹出结果位不起作用.从本质上讲,它会为攻击者提供链接跟踪许可,以挑选和禁用他不喜欢的部分页面 - 甚至可能包括其他与安全相关的措施,如framebuster脚本.
IE8认为"潜在危险"是什么?除了这个脚本标记之外,还有更多更多的陌生事物.例如.更重要的是,它似乎与使用文本模式系统(可能是正则表达式)的一组"危险"模板匹配,而不是像最终将解析页面本身的任何类型的HTML解析器.是的,使用IE8,你的浏览器正在使用HT̈͜MLw̧̼̜it̏̔h͙r̿e̴̬g̉̆e͎x͍͔̑̽̚.
通过查看查询中的字符串来进行"XSS保护" 完全是假的.它不能"固定"; 这个概念本质上是有缺陷的.除了在不需要时踩到它的问题之外,除了最基本的攻击外,它无法真正保护你免受任何攻击 - 并且攻击者肯定会在IE8变得更广泛使用的情况下解决这些问题.如果你忘记了正确地逃避HTML输出,你仍然会很脆弱; 所有XSS"保护"都为您提供了一种虚假的安全感.不幸的是,微软似乎喜欢这种虚假的安全感; 在服务器端,ASP.NET中也有类似的XSS"保护".
因此,如果您对webapp创作有了一些线索,并且您已经像一个好孩子一样正确地将输出转换为HTML,那么通过输出标题来禁用这种不必要的,不可行的,错误的入侵绝对是一个好主意:
X-XSS-Protection: 0
在您的HTTP响应中.(ValidateRequest="false"
如果您使用的是ASP.NET,请在您的页面中使用.)
对于其他人来说,他们仍然在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漏洞看起来像什么的混乱的想法之一.
为了解决这个问题,惠普需要在h30405.www3.hp.com上安装服务器X-XSS-Protection: 0
.
您应该向我(ericlaw @ microsoft)发送您认为不正确的场景的网络捕获(www.fiddlercap.com).
XSS过滤器的工作原理如下:
是否为此过程启用了XSSFILTER?
如果是 - 继续下一步检查如果否 - 绕过XSS过滤器并继续加载
是"文档"加载(如框架,而不是下载)?如果是 - 继续下一步检查如果否 - 绕过XSS过滤器并继续加载
它是HTTP/HTTPS请求吗?如果是 - 继续下一步检查如果否 - 绕过XSS过滤器并继续加载
RESPONSE是否包含x-xss-protection标头?是:值= 1:XSS过滤器已启用(无折旧检查)值= 0:XSS过滤器已禁用(无折旧检查)否:继续进行下一次检查
网站是否在URLAction启用XSS过滤的区域中加载?(默认情况下:Internet,受信任,受限制)如果是 - 继续下一步检查如果否 - 绕过XSS过滤器并继续加载
是跨站请求吗?(Referrer标头:HTTP请求引用标头中的最终(重定向后)完全限定域名是否与要检索的URL的完全限定域名匹配?)如果是 - 绕过XSS过滤器并继续加载如果否 - 则请求中的URL应该被中断.
RESPONSE数据的启发式指示是否来自不安全的请求数据?如果是 - 修改响应.
现在,#7的确切细节非常复杂,但基本上,你可以想象IE将请求数据(URL/Post Body)与响应数据(脚本体)匹配,如果它们匹配,那么响应数据将是改性.
在您的网站中,您需要查看POST主体http://h30405.www3.hp.com/print/start以及相应的响应.
实际上,它比看起来更糟糕.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