【发布时间】:2020-12-29 03:00:00
【问题描述】:
当用户收到 404 未找到时,我试图让他们返回到之前的屏幕,但我的 CSP 阻止了我。
使用 nonce 似乎是解决问题的方法,但我无法让幸运的事情发挥作用。
理想情况下,我想将 nonce 添加到我的 href 中,但我不确定这是否可行。或者,我想从 404 文件中运行一些 javascript,但它似乎没有获取我的 nonce 值。
这就是我在helmet-csp中设置nonce的方式:
app.locals.nonce = crypto.randomBytes(16).toString("hex");
app.use(csp({
directives: {
defaultSrc: ["'self'"],
styleSrc: ["'self'"],
scriptSrc: ["'self'", `'nonce-${app.locals.nonce}'`],
imgSrc: ["'self'"],
fontSrc: ["'self'"]
}
}));
在 nunjucks 404 页面中,我正在尝试返回上一页:
{% set n = "nonce-"+nonce %}
<a nonce={{n}} href="javascript:history.go(-1);">{{ t('404:goBack')</a>
在底部,我这样设置了我的脚本标签:
<style nonce=app.locals.nonce>
console.log('inside 404')
</style>
在登陆我的 404 页面时,Chrome 出现以下错误: eligibilixxxty-sf-debt:38 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' 'nonce-a8ff45c6cc9b12df8111202f13d1c000'”。启用内联执行需要使用“unsafe-inline”关键字、哈希(“sha256-+6WnXIl4mbFTCARd8N3COQmT3bJJmo32N8q8ZSQAIcU=”)或随机数(“nonce-...”)。
单击 href 链接会得到以下响应: 拒绝运行 JavaScript URL,因为它违反了以下内容安全策略指令:“script-src 'self' 'nonce-a8ff45c6cc9b12df8111202f13d1c000'”。启用内联执行需要“unsafe-inline”关键字、哈希(“sha256-...”)或随机数(“nonce-...”)。
任何想法我哪里出错了?
【问题讨论】:
-
你有一个类型。您需要在属性名称与其值之间使用
=,而不是-。 -
嗨昆汀。相应地更新了html,但它仍然无法正常工作,
-
您正在为您的 JS 代码使用
style标签而不是script标签...
标签: javascript content-security-policy nonce