XSS 是否随着 HTTP X-XSS-Protection 标头的引入而达到其生命周期的尽头?

信息安全 网页浏览器 xss javascript 网站 反剥削
2021-08-17 16:18:15

X-XSS-Protection在我看来,随着 HTTP 标头的引入,漏洞影响(阅读:现代浏览器可能受影响的用户数量)大大减少。

首先,这是否意味着当X-XSS-Protection正确设置了标头并且启用了浏览器的 XSS 保护时,Web 开发人员不再需要担心 XSS(至少对于使用现代浏览器的访问者而言)?这可能就像“我们不支持浏览器 X、X 和 X 以及 X 及更低版本。”一样简单。

其次,哪些(流行的)浏览器实现了这个安全功能,它是否默认启用,该版本是从哪个版本发布的或在什么日期发布的?

第三,该浏览器的 XSS 过滤器是否存在已知的绕过?

3个回答

XSS 是否随着 HTTP X-XSS-Protection 标头的引入而达到其生命周期的尽头?

No.X-XSS-Protection仅用于启用或禁用内置过滤[*] - 通常默认情况下启用。

所以一个更合适的问题是,如果 XSS 使用浏览器过滤器达到其生命周期的尽头。

但同样,答案是否定的。XSS 仍然是一个危险,原因有以下三个:

  • 持久性 XSS根本不受浏览器过滤的影响,因为浏览器无法知道什么是用户输入,什么不是。
  • 有些浏览器没有针对 XSS 的过滤器,例如 Firefox。XSS 漏洞是在服务器端引入的,Web 开发人员不应依赖浏览器供应商来防御它们。
  • 绕过浏览器过滤器:XSS 是上下文敏感的,这使得在不知道上下文的情况下很难防御(这也是为什么在输出数据时应该防御 XSS,而不是通过一些通用输入过滤器)。

绕过基本上可以由于两个原因而发生:

  1. 过滤器中存在错误。
  2. 用户输入在过滤不实用的位置回显。一个例子是<script>[userinput]</script>

[*] 由于标头没有在任何 RFC 中定义,因此很难说浏览器会如何反应。例如,如果标头设置为 0,Chrome 51 将禁用其过滤器,但如果设置为 1,则如果用户禁用它,它不会重新启用过滤器。其他浏览器的行为可能有所不同。

这可能就像“我们不支持浏览器 X、X 和 X 以及 X 及更低版本。”一样简单。

真的没那么简单。特别是大型组织在更新方面是出了名的糟糕。根据您的网站,您不能只说您不支持浏览器 X。

其次,哪些(流行的)浏览器实现了这个安全功能,它是否默认启用,该版本是从哪个版本发布的或在什么日期发布的?

X-XSS-ProtectionIE、Chrome 和 Safari支持。

Chrome 从 2010 年开始就有 XSS 过滤器(Chrome 4)在同年默认禁用,然后在 Chrome 8 中重新启用。

IE从 2008 年 (IE 8) 开始就有 XSS 过滤器

Firefox 没有过滤器,但 NoScript 插件有。

第三,是否有已知的浏览器 XSS 过滤器绕过?

的。当然还有更多。大多数取决于某些特定情况(例如,输入在两个位置回显)。IE8 过滤器实际上引入了 XSS 漏洞,即使是不包含该漏洞的站点也是如此。

在撰写本文时:

浏览器过滤不仅无法阻止 XSS,而且 XSS 杀死了浏览器过滤!

各种形式的 XSS Auditor(由X-XSS-PROTECTION标头控制)已正式死亡。总的来说,它死了是因为它的目标根本不现实。即使只是从浏览器级别反射的 XSS 也没有您想象的那么容易。XSS 审计员经常被绕过,也导致误报。他们甚至允许无法堵住的跨站点数据泄漏(这里总结)。到头来,这样的好处是不值得的。标题上Mozilla 页面X-XSS-PROTECTION给出了当前状态:

  • Chrome 移除了他们的 XSS Auditor
  • Firefox 没有,也不会实施 X-XSS-Protection
  • Edge 已停用其 XSS 过滤器

它在 Chrome 4-78 版本中可用,Edge 在 12-17 版本中可用,而在 Firefox 中从不可用。

XSS 的存在时间与 HTML 和 JavaScript 一样长。

实际上,即使该标题可以解决问题,第二部分是人为因素:主机/开发人员/网站管理员即将使用它,实际上......