Content Security Policy
内容安全策略 (CSP) 对于保护你的 Next.js 应用程序免受各种安全威胁非常重要,如跨站脚本攻击 (XSS)、点击劫持和其他代码注入攻击。
通过使用 CSP,开发者可以指定哪些来源可以用于内容源、脚本、样式表、图像、字体、对象、媒体 (音频、视频)、iframe 等。
示例
Nonce 是一个唯一的、随机生成的字符串,用于一次性使用。它与 CSP 结合使用,可以选择性地允许某些内联脚本或样式执行,从而绕过严格的 CSP 指令。
尽管 CSP 旨在阻止恶意脚本,但在某些情况下内联脚本是必要的。在这种情况下,nonce 提供了一种方法,允许这些脚本在具有正确 nonce 的情况下执行。
中间件允许你在页面渲染之前添加头部并生成 nonce。
每次查看页面时都应该生成一个新的 nonce。这意味着你必须使用动态渲染来添加 nonce。
例如:
默认情况下,中间件在所有请求上运行。你可以使用 matcher
来过滤中间件,使其仅在特定路径上运行。
我们建议忽略匹配预取 (来自 next/link
) 和不需要 CSP 头部的静态资源。
现在你可以使用 headers
从 服务器组件 中读取 nonce:
对于不需要 nonce 的应用程序,你可以直接在 next.config.js
文件中设置 CSP 头部:
我们建议使用 Next.js 的 v13.4.20+
版本来正确处理和应用 nonce。