如何为脚本和样式标签添加随机数以避免 'unsafe inline' CSP header 字段?

How to add a nonce for script and style tags to avoid 'unsafe inline' CSP header field?

上下文描述 我正在使用 AWS Amplify 部署我的静态网页。

自定义安全性 header 通过配置文件 customHttp.yml (https://docs.aws.amazon.com/amplify/latest/userguide/custom-headers.htm)

在部署中应用

我将 customHttp.yml 文件包含在 .nuxtignore 文件中,以防止仅在自定义 headers 更改时触发 webpack 文件的重建。但是,这只能在本地起作用,在部署过程中不能在服务器端起作用。

问题描述 AWS Amplify 在部署过程中不使用 .nuxtignore 文件。因此每次都会重建 webpack 文件,导致我需要在 CSP header 字段 script-src 和 style-src 中包含不同的哈希值。但是由于触发重建以将修改应用到 customHttp.yml 会导致 jetpack 文件具有新的 has 值,所以我们永远不知道预先的正确值。

解决问题的建议 随机数(如果是静态的)可以解决我的用例。例如,通过在 nuxt.config.js 文件中定义随机数。通过在 webpack 重建中包含随机数,我将能够在 CSP header 字段中引用静态随机数,因为值不会改变。

例如 - nuxt.config.js:

生成:{ script-nonce: 'nonce-457bb2Bb06E44Ab5aa9996Ed1a34b26F', style-nonce: 'nonce-[ ADD A VALUE HERE ]' }

我意识到内容安全策略规范在每次服务器传输 CSP-policy 时都需要一个唯一的随机数值,但是对于这个用例,静态随机数将是我的首选建议。

使用“静态随机数”与 'unsafe-inline' 用法相同。你只能愚弄一些在线 CSP 测试工具,他们无法识别你的 'nonce-value' 是静态的。

经典 XSS 是指可以插入和执行类似 <script>alert('XSS')</script> 的代码。没有 'unsafe-inline' 这样的内联脚本将被阻止。

但是使用“静态随机数”攻击者只需注入 <script nonce="static_nonce">alert('XSS')</script>,因此您的漏洞与允许 'unsafe-inline' 时完全相同。

虽然使用动态 nonce,攻击者可以看到当前的 nonce,但无法预测下一个。所以他不知道使用哪个nonce值,因为他的XSS只有在页面重新加载后才会被注入。

请参阅 With CSP enabled vis amplify.yml results in Errors #612,也许您会在那里找到一些线索(link Lambda@Edge 函数和底部的 Amazon CloudFront)。