内容安全策略看起来确实很强大,但我认为它并不完美(而且我看到有消息称它是 XSS 的“部分”预防)。我的问题是:它不能防止哪些类型的 XSS 攻击?
最佳答案
并非所有浏览器都实现了它,因此使用不受支持的浏览器的用户不会提供任何保护。
http://caniuse.com/#search=csp
即使在受支持的浏览器上,除非内容安全策略要禁用所有 JavaScript(内联、内部/外部域),否则它仍然会保留可以运行 JavaScript 的区域。这意味着,如果任何恶意 JavaScript 可以进入这些区域,那么内容安全策略将无法阻止 XSS 的发生。
CSP 无法阻止 XSS 的一些示例:
- 如果应用程序使用内联(在页面上)JavaScript 并且 CSP 策略允许。如果将未编码/未验证/恶意值放入页面中,则浏览器将运行恶意 JavaScript,就像运行有意的 JavaScript 一样。 (目前 ASP.Net Web 表单应用程序需要 JavaScript 才能在页面上运行,因此显示的任何恶意输入都将由浏览器执行。
- 如果您为应用动态创建 JS 文件,并且将未编码/未验证/恶意值插入到该文件中,则会导致 XSS 漏洞。
- 如果您通过 http 而不是 https 发送页面和/或 JavaScript 文件,MITM 攻击可以通过网络修改这些值。
- 如果您从第三方域加载 JavaScript 文件并且其安全性受到损害,则恶意脚本可能会发送到您的应用,而不是最初的脚本(例如 CDN)。
这些只是我能立即想到的一些例子。
其中一些问题看起来可以通过使用 CSP 2 级指令来缓解,但对它们的支持有限。
简而言之,CSP 是一个非常好的防御层,但它不应该是您唯一的防线。尽管它不会涵盖所有内容,并且当前并非所有浏览器都支持它,但它是我可以用来保证应用程序和用户安全的额外安全层。
关于javascript - 如何破坏内容安全策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35804925/