内容安全策略多个随机数

Content Security Policy multiple nonce

我有一个单页应用程序(内置于 .net core MVC 2.2),其中 html 部分是动态加载的。

在主文档中,添加了具有动态生成的 header 的 CSP 策略,如下所示:

Content-Security-Policy: script-src 'self' 'nonce-I64vb811BxRNGV9Xf0pM'

然后是通过 jquery ajax 加载函数加载的页面部分。页面部分包含带有随机数的脚本(来自 src)。使用 CSP header 提供的页面部分看起来像

Content-Security-Policy: script-src 'self' 'nonce-ci5TQsyidT8x2jwBLRHS'

一切正常,但浏览器(chrome,safari 阻止脚本),消息:

jqueryscriptsbundle.js:formatted:43 Refused to execute inline script 
because it violates the following 
Content Security Policy directive: "script-src 'self' 'nonce-I64vb811BxRNGV9Xf0pM'

因此浏览器正在比较脚本的随机数,即 ci5TQsyidT8x2jwBLRHS 与 root/main 页面随机数值 I64vb811BxRNGV9Xf0pM,因此脚本被阻止。

这是正确的行为吗?我该怎么做才能让它发挥作用?

与页面一起加载的初始 CSP 提供了随机数。您要做的是在初始页面加载后通过 Ajax 添加另一个随机数。 CSP 明确不允许这样做;这不是错误 - 这就是重点。

您可以做的是允许 strict-dynamic 的脚本源。这允许您授权脚本,并且该脚本加载的任何内容也被授权。参见 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src