在哪里指定内容安全策略 (CSP):在后端还是在前端?
Where to specify the Content Security Policy (CSP): on a backend or on a frontend?
据我了解,有两种方法可以指定内容安全策略:
- 在服务器端通过 headers:
res.setHeader("content security-policy", "default-src: 'none';")
- 在 HTML-page 中通过
meta
-tag:
<meta content = "default-src 'none';" http-equiv = "Content-Security-Policy" />
我的问题:
这两种技术有什么区别?
只用其中一个就够了吗?
我应该使用哪一个?后端、前端还是两者?
P.S。感谢 ,我知道什么是 CSP 以及它是如何工作的。然而,我想知道的是,究竟在哪里设置 CSP 比较好。
通过 HTTP header 交付 CSP 是 preferred way。
元标记具有相同的功能,但由于技术原因它不支持某些指令:frame-ancestors
、report-uri
、report-to
和 sandbox
。此外,元标记不支持 Content-Security-Policy-Report-Only
。
在 SPA(单页应用程序)中,元标记传统上用于 CSP 交付,因为现在很多主机都允许管理 HTTP header。
当 SSR(服务器端渲染)时,HTTP header 被更频繁地使用。
您可以使用任何技术上方便的 CSP 传送方法(记住元标记的限制),但不要同时使用这两种方法。两种政策将依次执行,如有差异,以较严格的政策为准。
注意:
- CSP 元标记应放在
<head>
中,否则将不起作用。
- 通过 javascript 更改元标记将导致新旧政策同时生效。
- 对于 non-HTML 文件的 CSP,技术上不能使用元标记
据我了解,有两种方法可以指定内容安全策略:
- 在服务器端通过 headers:
res.setHeader("content security-policy", "default-src: 'none';")
- 在 HTML-page 中通过
meta
-tag:
<meta content = "default-src 'none';" http-equiv = "Content-Security-Policy" />
我的问题:
这两种技术有什么区别?
只用其中一个就够了吗?
我应该使用哪一个?后端、前端还是两者?
P.S。感谢
通过 HTTP header 交付 CSP 是 preferred way。
元标记具有相同的功能,但由于技术原因它不支持某些指令:frame-ancestors
、report-uri
、report-to
和 sandbox
。此外,元标记不支持 Content-Security-Policy-Report-Only
。
在 SPA(单页应用程序)中,元标记传统上用于 CSP 交付,因为现在很多主机都允许管理 HTTP header。
当 SSR(服务器端渲染)时,HTTP header 被更频繁地使用。
您可以使用任何技术上方便的 CSP 传送方法(记住元标记的限制),但不要同时使用这两种方法。两种政策将依次执行,如有差异,以较严格的政策为准。
注意:
- CSP 元标记应放在
<head>
中,否则将不起作用。 - 通过 javascript 更改元标记将导致新旧政策同时生效。
- 对于 non-HTML 文件的 CSP,技术上不能使用元标记