内容安全策略
内容安全策略 (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。