SSA*_*SSA 4 html javascript nonce content-security-policy websecurity
我有一个单页面应用程序(内置于 .net core MVC 2.2),其中 html 部分是动态加载的。
在主文档中,添加了具有动态生成标头的 CSP 策略,如下所示:
Content-Security-Policy: script-src 'self' 'nonce-I64vb811BxRNGV9Xf0pM'
Run Code Online (Sandbox Code Playgroud)
然后是通过 jquery ajax 加载函数加载的页面部分。page 部分包含一个带有随机数的脚本(来自 src)。带有 CSP 标头的页面部分看起来像
Content-Security-Policy: script-src 'self' 'nonce-ci5TQsyidT8x2jwBLRHS'
Run Code Online (Sandbox Code Playgroud)
一切都很好,但浏览器(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'
Run Code Online (Sandbox Code Playgroud)
因此,浏览器正在将脚本的随机数(即 ci5TQsyidT8x2jwBLRHS)与根/主页随机数值 I64vb811BxRNGV9Xf0pM 进行比较,因此脚本被阻止。
这是正确的行为吗?我该怎么做才能让它发挥作用?
与页面一起加载的初始 CSP 提供了一个随机数。您想要做的是在初始页面加载后通过 Ajax 添加另一个随机数。CSP 明确不允许这样做;这不是一个错误——这才是重点。
您可能会做的是允许 script-src 为strict-dynamic. 这允许您授权脚本,并且该脚本加载的任何内容也会被授权。请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src
| 归档时间: |
|
| 查看次数: |
7085 次 |
| 最近记录: |