我在这样的页面上添加了我的脚本:
app.Use(async (context, next) =>
{
var ByteArray = new byte[20];
using (var Rnd = RandomNumberGenerator.Create())
{
Rnd.GetBytes(ByteArray);
}
var nonce = Convert.ToBase64String(ByteArray);
context.Items.Add("ScriptNonce", nonce);
context.Response.Headers.Add("Content-Security-Policy", new[] { string.Format("script-src-elem 'self' 'nonce-{0}'", nonce) });
await next();
});
<script nonce='@nonceValue' src="https://sl.setrowid.com/index.js.php?mkodu=2700" crossOrigin="anonymous"></script>
但它在控制台中设置错误:
拒绝加载脚本 'https://push.setrowid.com/v3/push_loader.php?mkodu=2700' 因为它违反了以下内容安全策略指令:“script-src-elem 'self' 'nonce-liYA5nqhRREBU3P1Wg /WrvVxmGQ='".
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src-elem 'self' 'nonce-liYA5nqhRREBU3P1Wg/WrvVxmGQ='”。启用内联执行需要“不安全内联”关键字、散列(“sha256-Ryk1bebqkZRJKst9ISGjr+0FqT27dlA4N8+D6EPUtKo=”)或随机数(“nonce-...”)。
在提供的代码中,您允许 https://sl.setrowid.com/index.js.php?mkodu=2700 使用随机数,但它拒绝加载 https://push.setrowid.com/v3 /push_loader.php?mkodu=2700。如果来自 setrowid.com 的内容是可信的,我建议在脚本源中允许 *.setrowid.com 而不是使用 nonce,因为它可能不会应用于重定向或者如果脚本代码调用另一个源。
最后一条错误消息是由于某处的内联脚本引起的,但您的问题中未提供。浏览器的控制台输出通常会告诉您它在哪里。如果它是一个插入内联脚本的脚本或者它是一个事件属性,则它不是 nonceable。事件属性(onclick、onfocus 等)需要用事件监听器重写。