当我使用随机数时,为什么我的CSP不能在nunjucks中阻止我的javascript代码

问题描述

我试图让用户在找不到404时返回到先前的屏幕,但是我的CSP正在阻止我。

使用nonce似乎是解决问题的方法,但是我无法让事情顺利。

理想情况下,我想将现时数添加到我的href中,但是我不确定这是否可行。另外,我想从404文件中运行一些javascript,但似乎并没有提高我的现时价值。

这是我在头盔csp中设置随机数的方法:

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'”。要启用内联执行,要么使用哈希('sha256- + 6WnXIl4mbFTCARd8N3COQmT3bJJmo32N8q8ZSQAIcU ='),要么使用随机数(nonce)。

然后单击href链接可获得以下响应: 拒绝运行JavaScript URL,因为它违反了以下内容安全策略指令:“ script-src'self''nonce-a8ff45c6cc9b12df8111202f13d1c000'”。要启用内联执行,需要使用'unsafe-inline'关键字,哈希('sha256 -...')或随机数('nonce -...')。

有什么想法我要去哪里吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)