我在向网站添加 CSP 时遇到了一些问题。我在 nginx 配置中配置了 Content-Security-Policy-Report-Only。我得到了这个。
adsbygoogle.js:37 [仅报告] 拒绝应用内联样式,因为它违反了以下内容安全政策指令:“style-srchttp://example.com“。需要使用 'unsafe-inline' 关键字、哈希值 ('sha256-c+dT7QO/wB/DJJUeioTL/YNq09s5o1WF1vk5RjJU/4I=') 或随机数 ('nonce-...') 来启用内联执行。(匿名函数) @ adsbygoogle.js:37
我搜索了相关解决方案。但我到处都看到类似这样的内容:“打开‘unsafe-inline’”。但这是非安全方法。我想我可以使用“nonce-”。但我不知道如何在 nginx conf 中实现它。你能帮助我吗?
答案1
为了使用 nonces 而修改 nginx 配置是不够的。
必须生成随机数对于每个请求,以便攻击者无法知道它们(否则,他们可以注入具有相同随机数的脚本/资源)。
因此:
- 如果您使用 nginx 作为反向代理,则必须修改您的应用程序(在 nginx 后面),以便它生成一个 nonce,将该 nonce 添加到其输出中的所有
<script>
块和<style>
块中并提供相应的 CSP 标头。 - 如果您使用 nginx 来提供静态文件,请将
<script>
内容移动<style>
到单独的文件中,计算它们的哈希值,然后使用哈希值。
现在,回答完一般性问题后,让我们来谈谈具体问题。从您的错误消息来看,我认为您说的是 //pagead2.googlesyndication.com/pagead/js/adsbygoogle.js。该脚本似乎使用了内联样式,但不受您的控制,因此您无法使用 nonce。除了要求 Google 更改脚本外,我不知道您还能做什么。