【发布时间】:2014-02-10 18:06:00
【问题描述】:
在阅读了 Eric Lawrence 的this article 之后,我看到了这个测试页面http://www.enhanceie.com/test/xss/,它模拟了Reflective XSS Protection 的用法。
现在,根据google chromium:
XSS 过滤器检查是否有脚本即将在网页上运行 也存在于获取该网页的请求中。如果 请求中存在脚本,这强烈表明 Web 服务器可能已被欺骗以反映脚本。
所以,如果我发布到服务器:
<script>alert("bang! script injection\n"+document.cookie);</script>
并且浏览器也可以看到它通过 url 的请求:
http://webdbg.com/test/xss/Hello.asp?txtName=%3Cscript%3Ealert%28%22bang%21+script+injection%5Cn%22%2Bdocument.cookie%29%3B%3C%2Fscript%3E
然后它显示此错误(控制台):
XSS Auditor 拒绝执行脚本 'http://webdbg.com/test/xss/Hello.asp?txtName=%3Cscript%3Ealert%28%22bang%21+script+injection%5Cn%22%2Bdocument.cookie%29%3B%3C%2Fscript%3E' 因为在请求中找到了它的源代码。审计员是 启用,因为服务器既不发送“X-XSS-Protection”也不发送 'Content-Security-Policy' 标头。
但是提琴手确实告诉我页面确实让脚本运行:
问题:
由于处理xss的解决方案是html Encode/decode,
我应该如何/何时将这两种解决方案结合起来?
我的意思是我可以使用 html 编码并且脚本永远不会在我的页面中运行,或者,我可以使用这个标题...?
我很困惑。
【问题讨论】:
-
作为注释,有一些攻击利用浏览器中的 XSS 过滤器通过附加到攻击者 不 想要的脚本的查询字符串 sn-ps在受害者站点中运行。
标签: javascript http http-headers xss fiddler