首页 > 解决方案 > 将 Content-Security-Policy 与 modernizr 一起使用的当前最佳实践是什么?

问题描述

我们希望使用 Content-Security-Policy 保护我们的站点,即使设置允许内联脚本 ( default-src 'self'; script-src 'self' 'unsafe-inline'),加载 modernizr (2.6.2) 也会产生 4 个 CSP 违规:

在此处输入图像描述

我升级到最新版本(3.6.0),开发版本,现在它产生了 30 多个 CSP 违规:

在此处输入图像描述

我在modernizr 网站上找不到任何关于CSP 的官方声明,它只是提到在2012 年,他们添加了对内容安全策略的检测(https://modernizr.com/news/modernizr-262)。阅读各种博客和 Stack Overflow 问题,我发现 2017 年最新的最佳实践是:

如果modernizr 正在注入所有内联的东西而不是看起来你的选择是(a)添加所有这些哈希,(b)使用'unsafe-inline'(但这基本上违背了CSP的全部目的......),或者(c ) 不要使用modernizr。

虽然,即使使用unsafe-inline.

有没有人找到同时使用 Content-Security-Policy 和 modernizr 的可行解决方案?

标签: content-security-policymodernizr

解决方案


尝试使用这个宽松的 CSPdefault-src * 'unsafe-eval' 'unsafe-inline' 'unsafe-dynamic' data: filesystem: about: blob: ws: wss:并开始删除关键字,直到开始出现错误,使用这种方法,您可以根据需要调整 CSP。

如果有某种 CSP 生成器,您可以在其中为它提供一个网站,并且它只知道您需要哪个 CSP 以避免出错,那就太好了。

请记住,* 表示允许所有域,因此请将其替换为您打算支持的所有域。

这当然只是修复或解决问题,这取决于它的风险,你的网站提供什么内容,以及如果 XSS 攻击可以被执行,用户将有多脆弱。CSP 仅保护免受 XSS 攻击,这只是可以由第三方插入的 JavaScript,例如使用 HTTPS,将使 MITM 几乎不可能注入任意代码。


推荐阅读