在 csp 策略中设置随机数的正确程序是什么?

What is the right procedure to set a nonce in the csp policy?

我正在尝试在 csp 策略中设置随机数,但它没有按预期工作。

以下代码是我目前用于测试目的的代码:

server.js

  express.use(function(req, res, next) {
    res.set({
      "Content-Security-Policy":"script-src 'self' 'nonce-random1'"
    });
    return next();
  });

index.html

  <script nonce="random1" type="text/javascript" src="/script1.js"> 
  </script>

我在浏览器的控制台中收到此错误: 拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:“script-src 'self' 'nonce-random1'...

我尝试添加源 /script1.js,就好像它是用于测试目的的域一样:

  express.use(function(req, res, next) {
    res.set({
      "Content-Security-Policy":"script-src 'self' /script1.js"
    });
    return next();
  });

显然它不起作用,我得到了同样的错误。

我试着查看了文档,语法应该是正确的。我尝试查看类似的问题或相关文章,但没有找到任何有用的信息。

我想避免使用不安全内联。 将来我将为每个请求实现一次性哈希作为随机数。

有人知道为什么 nonce 失败了吗?

Refused to execute inline event handler

表示您有事件处理程序内置标记,例如 <div onclick='handler()'><body onload='some_javascript_here'>
你的<script nonce='random1'>...</script>被执行了,你可以往里面插入console.log('I am done')来保证。

将内联事件处理程序替换为 addEventListener() 或在合适的情况下使用 jQuery。

"Content-Security-Policy":"script-src 'self' /script1.js"

wrong/script1.js 指令中不允许使用相对 URL。
您的第一个 CSP "Content-Security-Policy":"script-src 'self' 'nonce-random1'" 是正确的。