这里有没有人能够澄清缓存如何影响向nonce=value
所有内联javascript添加a?
如果 nonce 必须是唯一且不可预测的,则需要禁用使用<script nonce="XXXXX">
. 正确的?
有关详细信息,请参见此处的示例 4 。
这里有没有人能够澄清缓存如何影响向nonce=value
所有内联javascript添加a?
如果 nonce 必须是唯一且不可预测的,则需要禁用使用<script nonce="XXXXX">
. 正确的?
有关详细信息,请参见此处的示例 4 。
如果 nonce 必须是唯一且不可预测的,则需要禁用使用 <script nonce="XXXXX"> 的页面上的所有服务器端(即 Varnish、Cloudfront 等)缓存。正确的?
是的。您总是必须禁用任何动态生成的缓存(即来自脚本)。由于您无法静态提供唯一且不可预测的随机值,因此必须通过脚本完成。
这可以由应用程序服务器愉快地缓存数天,而不会对 CSP 随机数保护产生负面影响。
不,nonce 对于每个请求都应该是唯一的(nonce = 使用一次的数字)。
我想唯一的解决方案是对包含 nonce 的脚本标签使用非缓存 SSI(服务器端包括),并将其与响应内容安全标头中的 nonce 或元 http-equiv="Content 的另一个小 SSI -安全策略”-标签。
这将使每个页面都是唯一的,因此不可缓存。
这取决于我们正在谈论的服务器端缓存,因为这通常有很多层。如果您的应用程序服务器正在缓存 HTML 以节省昂贵的 SQL 查询和模板处理,那么您仍然可以通过在返回的途中修改输出 HTML 来使用 nonce。您的模板以及生成的 HTML 可能包含如下占位符:
<script nonce="CSP_NONCE_PLACEHOLDER">
...
</script>
这可以由应用程序服务器愉快地缓存数天,而不会对 CSP 随机数保护产生负面影响。
然后在Web 服务器上动态生成 nonce并替换上述占位符而不使缓存值过期:
<script nonce="ee4183bb7784017e0ab7d38ab7ef9eb3a75190e0e76ca5daba8cd20104bd8131">
...
</script>
多年来,我一直在webcookies.org 上使用 Web 应用程序在 Django 上运行,缓存在 Redis 中,Web 服务器是 Nginx。对于后者,有两种选择:
$ssl_session_id
用作随机数: sub_filter_once off;
sub_filter CSP_NONCE_PLACEHOLDER $ssl_session_id;