首页 > 解决方案 > 在哪里指定内容安全策略 (CSP):在后端还是在前端?

问题描述

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

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

我的问题:

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

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

  3. 我应该使用哪一个?后端,前端,还是两者兼而有之?

PS 感谢内容安全策略 (CSP) 如何工作?,我知道什么是 CSP 以及它是如何工作的。但是,我想知道的是在哪里设置 CSP 更好。

标签: content-security-policy

解决方案


通过 HTTP 标头传递 CSP 是一种首选方式

元标记具有相同的功能,但出于技术原因,它不支持某些指令:frame-ancestorsreport-uri和. 元标记也不支持。report-tosandboxContent-Security-Policy-Report-Only

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

在 SSR(Server Side Rendering)时,更频繁地使用 HTTP 标头。

您可以使用任何技术上方便的 CSP 交付方法(记住元标记的限制),但不要同时使用这两种方法。这两项政策将一个接一个地执行,因此如果出现差异,实际上将适用更严格的政策。

注意:

  • CSP 元标记应放在 中<head>,否则将不起作用。
  • 通过 javascript 更改元标记将导致旧策略和新策略都生效。
  • 在 CSP 用于非 HTML 文件的情况下,元标记在技术上不能使用

推荐阅读