content-security-policy - 将 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 的可行解决方案?
解决方案
尝试使用这个宽松的 CSPdefault-src * 'unsafe-eval' 'unsafe-inline' 'unsafe-dynamic' data: filesystem: about: blob: ws: wss:
并开始删除关键字,直到开始出现错误,使用这种方法,您可以根据需要调整 CSP。
如果有某种 CSP 生成器,您可以在其中为它提供一个网站,并且它只知道您需要哪个 CSP 以避免出错,那就太好了。
请记住,* 表示允许所有域,因此请将其替换为您打算支持的所有域。
这当然只是修复或解决问题,这取决于它的风险,你的网站提供什么内容,以及如果 XSS 攻击可以被执行,用户将有多脆弱。CSP 仅保护免受 XSS 攻击,这只是可以由第三方插入的 JavaScript,例如使用 HTTPS,将使 MITM 几乎不可能注入任意代码。
推荐阅读
- flutter - 飞镖中的最终/常量
- jenkins - JenkinsPipelineUnit 如何与共享声明式管道一起使用?
- python - Python、Selenium 和 2Captcha 解决验证码不起作用
- python - 从 Kivy 和 Python 中的 FileChooserIconView 拖放文件后,在文本输入小部件中获取文件路径
- ios - 利用 iOS 15 的英语字符串语法协议功能
- java - 创建在线食品配送 Java GUI,如何应用对象数组来注册客户信息和订购食品按钮?
- android - Hilt - 字段注入返回一个空对象引用
- python - 我可以同时考虑 in 和 float 类型吗
- tensorflow - 微调 Bert 模型中的 fit() 函数错误
- sharepoint - 如何要求Word文档的不同部分由不同的审批人审批?