在哪里指定内容安全策略 (CSP):在后端还是在前端?

Where to specify the Content Security Policy (CSP): on a backend or on a frontend?

据我了解,有两种方法可以指定内容安全策略:

res.setHeader("content security-policy", "default-src: 'none';")
<meta content = "default-src 'none';" http-equiv = "Content-Security-Policy" />

我的问题:

  1. 这两种技术有什么区别?

  2. 只用其中一个就够了吗?

  3. 我应该使用哪一个?后端、前端还是两者?

P.S。感谢 ,我知道什么是 CSP 以及它是如何工作的。然而,我想知道的是,究竟在哪里设置 CSP 比较好。

通过 HTTP header 交付 CSP 是 preferred way

元标记具有相同的功能,但由于技术原因它不支持某些指令:frame-ancestorsreport-urireport-tosandbox。此外,元标记不支持 Content-Security-Policy-Report-Only

在 SPA(单页应用程序)中,元标记传统上用于 CSP 交付,因为现在很多主机都允许管理 HTTP header。

当 SSR(服务器端渲染)时,HTTP header 被更频繁地使用。

您可以使用任何技术上方便的 CSP 传送方法(记住元标记的限制),但不要同时使用这两种方法。两种政策将依次执行,如有差异,以较严格的政策为准。

注意:

  • CSP 元标记应放在 <head> 中,否则将不起作用。
  • 通过 javascript 更改元标记将导致新旧政策同时生效。
  • 对于 non-HTML 文件的 CSP,技术上不能使用元标记