首页 > 解决方案 > 在 csp 策略中设置随机数的正确程序是什么?

问题描述

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

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

服务器.js

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

索引.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 失败了吗?

标签: javascriptexpressxsscontent-security-policy

解决方案


拒绝执行内联事件处理程序

表示您有事件处理程序内置标签等<div onclick='handler()'><body onload='some_javascript_here'>
<script nonce='random1'>...</script>执行,您可以插入其中console.log('I am done')以确保这一点。

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

“内容安全策略”:“script-src 'self' /script1.js”

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


推荐阅读