【问题标题】:How to add a nonce for script and style tags to avoid 'unsafe inline' CSP header field?如何为脚本和样式标签添加随机数以避免“不安全的内联”CSP 标头字段?
【发布时间】:2021-01-17 16:54:33
【问题描述】:

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

自定义安全标头通过配置文件 customHttp.yml (https://docs.aws.amazon.com/amplify/latest/userguide/custom-headers.htm) 应用在部署中

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

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

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

例如——nuxt.config.js:

生成:{ 脚本随机数:'nonce-457bb2Bb06E44Ab5aa9996Ed1a34b26F', style-nonce: 'nonce-[在此处添加值]' }

我意识到,每次服务器传输 CSP 策略时,内容安全策略规范都需要一个唯一的 nonce 值,但对于这个用例,我更喜欢静态 nonce。

【问题讨论】:

    标签: webpack nuxt.js aws-amplify content-security-policy


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 资源解决了静态随机数的问题。我也有使用 lambda 生成 http 标头的经验,如资源中所述。连接已部署的静态页面的问题是当前 AWS 不显示云端实例; AFAIK 您无法从 AWS Apmlify 云端资源触发 lambda@edge 来更改标头。另请参阅“Amplify Framework 在身份验证和存储类别中增加了对 AWS Lambda 触发器的支持”aws.amazon.com/blogs/mobile/…
    猜你喜欢
    • 2021-12-13
    • 2021-07-29
    • 2020-07-24
    • 2020-07-19
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多