将 crypto.js 值传递给脚本随机数
Pass crypto.js value to script nonce
我已经使用 node-helmet 设置了我的项目 CSP,所以它看起来像这样:
// app.js
let nonce = require('./config/nonce')
app.use(
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", nonce],
// other stuff
},
})
);
// config/nonce.js
const crypto = require('crypto');
let nonce = crypto.randomBytes(16).toString('base64');
module.exports = nonce;
// faqController.js
require("dotenv").config();
let nonce = require('../config/nonce')
exports.faq = function (req, res) {
res.render("faq", {
nonce: nonce
});
};
我可以使用 <%= nonce %>
在 HTML 中将 nonce 显示为文本,因此我知道该值已正确传递,但是当我尝试将该值传递给脚本上的 nonce 属性时标签,价值似乎没有通过。我只是收到一条错误消息,说脚本违反了我的 CSP
编辑#2:
我现在在我的控制台中收到此错误:
The source list for Content Security Policy directive 'script-src' contains an invalid source: 'myValueFromCrypto'. It will be ignored
我看到很多人建议对随机数使用加密...为什么我的 CSP 忽略了它?
编辑#3:
我改了let nonce = crypto.randomBytes(16).toString('base64');
到 let nonce = crypto.randomBytes(16).toString('hex');
这使得 CSP 接受该值..但我仍然无法将 crypto 创建的值传递到我的脚本标签中的 nonce 属性中......这是怎么回事!
我感觉问题一定出在scriptSrc: ["'self'", nonce]
...我真的不知道!
我通过将我的 csp 更改为以下解决了这个问题:
scriptSrc: ["'self'", `'nonce-${nonce}'`],
,希望有一天这对某人有所帮助!
我已经使用 node-helmet 设置了我的项目 CSP,所以它看起来像这样:
// app.js
let nonce = require('./config/nonce')
app.use(
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", nonce],
// other stuff
},
})
);
// config/nonce.js
const crypto = require('crypto');
let nonce = crypto.randomBytes(16).toString('base64');
module.exports = nonce;
// faqController.js
require("dotenv").config();
let nonce = require('../config/nonce')
exports.faq = function (req, res) {
res.render("faq", {
nonce: nonce
});
};
我可以使用 <%= nonce %>
在 HTML 中将 nonce 显示为文本,因此我知道该值已正确传递,但是当我尝试将该值传递给脚本上的 nonce 属性时标签,价值似乎没有通过。我只是收到一条错误消息,说脚本违反了我的 CSP
编辑#2:
我现在在我的控制台中收到此错误:
The source list for Content Security Policy directive 'script-src' contains an invalid source: 'myValueFromCrypto'. It will be ignored
我看到很多人建议对随机数使用加密...为什么我的 CSP 忽略了它?
编辑#3:
我改了let nonce = crypto.randomBytes(16).toString('base64');
到 let nonce = crypto.randomBytes(16).toString('hex');
这使得 CSP 接受该值..但我仍然无法将 crypto 创建的值传递到我的脚本标签中的 nonce 属性中......这是怎么回事!
我感觉问题一定出在scriptSrc: ["'self'", nonce]
...我真的不知道!
我通过将我的 csp 更改为以下解决了这个问题:
scriptSrc: ["'self'", `'nonce-${nonce}'`],
,希望有一天这对某人有所帮助!