javascript - 在 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 失败了吗?
解决方案
拒绝执行内联事件处理程序
表示您有事件处理程序内置标签等<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'"
是正确的。
推荐阅读
- reactjs - 如何导入默认从 React 中的对象导出的方法?
- python - SQLAlchemy Core:将三列组合成一列
- image - 用于图像的 Azure CDN 缓存,慢吗?
- powershell - 如何事后调试 .NET 进程并将 powershell 脚本作为调试器操作运行?
- c - Swift中的字节数组指针范围
- java - Java中的梯度下降但是
- quarkus - Quarkus Graalvm 本机应用程序 ClassNotFoundException com.sun.xml.internal.ws.spi.ProviderImpl
- regex - 如何正确链接 Perl 替换
- c# - 如何延迟模拟httpMessageHandler?
- javascript - 如何在后端 Vb.net 上调用 Javascript 函数