内容安全策略是否值得支持?

信息安全 应用安全 Web应用程序 网页浏览器 xss 对策
2021-09-03 17:59:46

Mozilla Firefox 4.0 支持一种叫做内容安全策略的东西,它禁止对嵌入式 Java 脚本的解释。仅执行使用脚本标记引用且位于白名单域中的外部 Java 脚本文件。

目前只有 Mozilla Firefox 4.0 支持它,但它是W3C 草案

鉴于重写现有的 Web 应用程序以停止使用 on-attributes 是一项大量工作,问题就出现了,是否值得麻烦。

其他浏览器可能会支持它吗?是否有已知的方法来规避保护(假设 .js 文件是静态的)?

3个回答

CSP 以及 HTTP cookie 安全标志、HSTS 和 X-FRAME-OPTIONS 将永远是我最喜欢的 HTTP 响应标头,用于始终提高用户的安全性。

另请参阅 --在 Web 应用程序中启用浏览器安全性

我认为这种机制只有在特定的情况下才有真正的价值。

在一般情况下,对于常规 Web 应用程序,您最好将代码修复为 XSS 安全,正如@SteveS 所写的那样。

但是,在某些情况下,这并不容易实现,并且这些情况越来越受欢迎。我指的是“用户生成的内容”,您需要允许用户输入(几乎)任何数据,包括任意 HTML 内容 - 博客、社交网站、CMS 等......

现在,我的安全专业部分正在为此感到畏缩,我马上想跳起来大喊:“不,你不需要这样做,找到更好的方法!”。但是,这当然不是重点......
而且是的,有一些迂回的方法可以避免这种情况,让用户输入任意 HTML - 将某些标签列入白名单,或使用替代标记系统(如此处使用的Markdown) - 但那些有点杂乱无章,功能有限,对某些最终用户来说并非微不足道。

归根结底,一些 webapps 将接受任意 HTML,无论出于何种原因,业务认为有必要,并且大喊它是多么不安全可能会适得其反,因为这根本行不通。
在这些情况下,内容安全策略可以增加巨大的价值,并在很大程度上缓解 XSS 特性。

从理论上讲,这是一个好主意,但我认为要问的更重要的问题是:这解决了什么问题?我可以看到它使防止 XSS 的工作变得更容易,但是您仍然需要动态生成 JavaScript,因此您只需攻击 .js 文件,而不是攻击页面本身。但是您说的是静态 .js 文件...

我的猜测是,它比它的价值更麻烦。最好将代码重写为 XSS 安全,而不是依赖浏览器做任何事情。