Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Next.js Nextjs预加载的脚本被严格的CSP阻止_Next.js_Content Security Policy - Fatal编程技术网

Next.js Nextjs预加载的脚本被严格的CSP阻止

Next.js Nextjs预加载的脚本被严格的CSP阻止,next.js,content-security-policy,Next.js,Content Security Policy,我正在尝试在我的下一个应用程序中基于。在我的\u document.js中,我有以下内容: const cspHashOf=(text)=>{ const hash=crypto.createHash('sha256') hash.update(文本) 返回`'sha256-${hash.digest('base64')}` } 设cspStr='' for(让k进入csp){ cspStr+=`${k}${csp[k]}` } render(){ const nonce=crypto.ra

我正在尝试在我的下一个应用程序中基于。在我的
\u document.js
中,我有以下内容:

const cspHashOf=(text)=>{
const hash=crypto.createHash('sha256')
hash.update(文本)
返回`'sha256-${hash.digest('base64')}`
}
设cspStr=''
for(让k进入csp){
cspStr+=`${k}${csp[k]}`
}

render(){
const nonce=crypto.randomBytes(8.toString('base64'))
设csp={
“对象src”:“无”,
'基本uri':“'self'”,
'script src':`nonce-${nonce}''不安全内联''不安全评估''严格动态'https:http:${cspHashOf(
NextScript.getInlineScriptSource(this.props)
)}`,
}
设cspStr=''
for(让k进入csp){
cspStr+=`${k}${csp[k]}`
}
返回(
...
...
)
在呈现的页面中,我有来自Next的所有这些预加载块,它们被阻止了

<link rel="preload" href="/_next/static/chunks/8be9d4c0d98df170721d8fe575c2a4bcd5b2fbe4.e7c8a9ea6074f4dcaa51.js" as="script">
<link rel="preload" href="/_next/static/chunks/863050a7585a2b3888f2e4b96c75689f1ae4a93d.a73c594ed7ed04a682dc.js" as="script">
<link rel="preload" href="/_next/static/chunks/be8560b560b3990e61cbef828a20e51dc9370d83.4acbf8ef4e1b51b0bc0f.js" as="script">
<link rel="preload" href="/_next/static/chunks/be8560b560b3990e61cbef828a20e51dc9370d83_CSS.6164c81b6ed04bb13dbd.js" as="script">


如何防止它们被阻止?

我最终能够解决这个问题,方法是将
nonce
作为道具传递给
Head

<Head nonce={nonce}>


来自Next.js的关于此的文档不存在!如果有人发现它可以共享链接,我很乐意。

只想指出,如果您对脚本使用哈希,您不一定需要使用nonce。旧的
和严格的csp
Next.js示例使用nonce,但是相反。谢谢@juliomalves-我正在使用所有我的第三方脚本都是nonce,因此更容易一致地包含它。如果您希望允许预加载脚本,只需将“nonce value”添加到
标记中。您的意思是NextJS自动重新分发
nonce=“{nonce}”
属性从
部分到嵌套的
标记?是。如果不将nonce传递给nextjs组件,它生成的预加载标记就没有nonce