XSS 是否随着 HTTP X-XSS-Protection 标头的引入而达到其生命周期的尽头?
No.X-XSS-Protection仅用于启用或禁用内置过滤[*] - 通常默认情况下启用。
所以一个更合适的问题是,如果 XSS 使用浏览器过滤器达到其生命周期的尽头。
但同样,答案是否定的。XSS 仍然是一个危险,原因有以下三个:
- 持久性 XSS根本不受浏览器过滤的影响,因为浏览器无法知道什么是用户输入,什么不是。
- 有些浏览器没有针对 XSS 的过滤器,例如 Firefox。XSS 漏洞是在服务器端引入的,Web 开发人员不应依赖浏览器供应商来防御它们。
- 绕过浏览器过滤器:XSS 是上下文敏感的,这使得在不知道上下文的情况下很难防御(这也是为什么在输出数据时应该防御 XSS,而不是通过一些通用输入过滤器)。
绕过基本上可以由于两个原因而发生:
- 过滤器中存在错误。
- 用户输入在过滤不实用的位置回显。一个例子是
<script>[userinput]</script>。
[*] 由于标头没有在任何 RFC 中定义,因此很难说浏览器会如何反应。例如,如果标头设置为 0,Chrome 51 将禁用其过滤器,但如果设置为 1,则如果用户禁用它,它不会重新启用过滤器。其他浏览器的行为可能有所不同。
这可能就像“我们不支持浏览器 X、X 和 X 以及 X 及更低版本。”一样简单。
真的没那么简单。特别是大型组织在更新方面是出了名的糟糕。根据您的网站,您不能只说您不支持浏览器 X。
其次,哪些(流行的)浏览器实现了这个安全功能,它是否默认启用,该版本是从哪个版本发布的或在什么日期发布的?
X-XSS-Protection受IE、Chrome 和 Safari支持。
Chrome 从 2010 年开始就有 XSS 过滤器(Chrome 4)。它在同年默认禁用,然后在 Chrome 8 中重新启用。
IE从 2008 年 (IE 8) 开始就有 XSS 过滤器。
Firefox 没有过滤器,但 NoScript 插件有。
第三,是否有已知的浏览器 XSS 过滤器绕过?
是的。当然。还有更多。大多数取决于某些特定情况(例如,输入在两个位置回显)。IE8 过滤器实际上引入了 XSS 漏洞,即使是不包含该漏洞的站点也是如此。