从 CSP 中删除反射 xss 指令的真正原因是什么?

信息安全 xss 内容安全策略 反射-xss
2021-09-05 22:32:24

过去,服务器可以设置两个响应标头来指示浏览器启用基于启发式的反射 XSS 检测和预防。

  1. X-XSS 防护:1;模式=块
  2. 内容安全策略:反射-xss

X-XSS 保护

此标头根据 MDN

内容安全政策

CSP 2.0 和 3.0 指定了一个指令 reflect-xss。它在 CSP 2.0 的草案中,大多数现代浏览器不支持它(Chrome)或没有提及该指令。

  1. 现代浏览器没有任何可以由服务器标头控制的基于启发式的 XSS 保护是否是一个公平的假设?
  2. 是否还有其他被广泛采用的 XSS 保护标头?
1个回答

我认为您提供的 Mozilla 链接足以回答您的问题(从线程中无序引用,以便我可以讲述一个更好的故事)

Firefox 可以使用(可能更昂贵的)算法做得更好,例如此处描述的算法(http://seclab.cs.sunysb.edu/seclab/pubs/ndss09.pdf)。插入脚本执行而不是 HTTP 流量(如本文所做的那样)可以匹配更小的字符串,这可能不会导致该算法的大幅减速。

所以这种启发式 XSS 保护算法依赖于一堆字符串比较 URL 和页面内容,因此会被那些想要降低浏览器 CPU 占用率的人所反对。


在我们等待浏览器和网站采用 CSP 的同时,针对反射 XSS 攻击的保护可能是对 Mozilla 的有用补充。事实上,它可以作为不提供 CSP 的网站的默认 CSP 来实现。

这里的含义是,在浏览器中运行的通用启发式算法严格来说不如给定网站的开发人员提供正确实现的 CSP 来说明应该允许在其页面上运行哪些内容。


已经进行了多次讨论,最近一次是在 2016 年底,我们得出的结论是,目前不值得为 Firefox 提供内置功能付出努力:

XSS 过滤器不能防止存储的(也称为持久的)XSS 或 DOM XSS,这在最近变得越来越流行。

一个 XSS 过滤器如果没有非常勤奋和积极地维护,很容易出现安全漏洞。很难证明在提供有限价值的功能上花费安全工程时间是合理的。

最后,NoScript 中有一个人们可以使用的 XSS 过滤器。

这有点不言自明,XSS 过滤器在一天结束时并没有那么有效。