我一直在阅读我能找到的关于 CSP、Helmet、nodejs、PUG 的所有内容。但是我不是很了解,而且我正在做的事情不起作用。
在我的登录页面的 PUG 文件中(页面源似乎没问题)我有
script(nonce="e33ccde670f149c1789b1e1e113b0916").
function populate() {
var dbn = document.getElementById("dbname").value;
var schem = document.getElementById("dbschema").value;
var nom = document.getElementById("nomuser").value.replace(/\s+/g, '');
document.getElementById("username").value = dbn + "_" + schem + "_" + nom;
}
function valid() {}
我已经看到我应该使用 Helmet,并且在 Helmet 的文档中我看到了我在 app.js 中放入的这段代码
// Sets "Content-Security-Policy: default-src 'self';script-src 'self' 'nonce-e33ccde670f149c1789b1e1e113b0916'"
app.use((req, res, next) => {
res.locals.cspNonce = 'e33ccde670f149c1789b1e1e113b0916';
next();
});
app.use(
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", (req, res) => `'nonce-${res.locals.cspNonce}'`]
}
})
);
它不工作。在控制台中我有
Refused to execute inline script because it violates the following Content Security
Policy directive: "script-src 'self' 'nonce-e33ccde670f149c1789b1e1e113b0916'". Either
the 'unsafe-inline' keyword, a hash ('sha256o1i9bymuZKyWf/wjjYx0vr3nBkeKDiu6QOw0TLT8nTI='),
or a nonce ('nonce-...') is required to enable inline execution.
我完全不明白——我脑子里一片空白。任何指向文档或示例或解释的指针将不胜感激。谢谢