content-security-policy - 在哪里指定内容安全策略 (CSP):在后端还是在前端?
问题描述
据我了解,有两种方法可以指定内容安全策略:
- 在服务器端通过标头:
res.setHeader("content security-policy", "default-src: 'none';")
- 在通过
meta
-tag 的 HTML 页面中:
<meta content = "default-src 'none';" http-equiv = "Content-Security-Policy" />
我的问题:
这两种技术有什么区别?
只使用其中一个就足够了吗?
我应该使用哪一个?后端,前端,还是两者兼而有之?
PS 感谢内容安全策略 (CSP) 如何工作?,我知道什么是 CSP 以及它是如何工作的。但是,我想知道的是在哪里设置 CSP 更好。
解决方案
通过 HTTP 标头传递 CSP 是一种首选方式。
元标记具有相同的功能,但出于技术原因,它不支持某些指令:frame-ancestors
、report-uri
和. 元标记也不支持。report-to
sandbox
Content-Security-Policy-Report-Only
在 SPA(单页应用程序)中,元标记传统上用于 CSP 交付,因为现在许多主机都允许管理 HTTP 标头。
在 SSR(Server Side Rendering)时,更频繁地使用 HTTP 标头。
您可以使用任何技术上方便的 CSP 交付方法(记住元标记的限制),但不要同时使用这两种方法。这两项政策将一个接一个地执行,因此如果出现差异,实际上将适用更严格的政策。
注意:
- CSP 元标记应放在 中
<head>
,否则将不起作用。 - 通过 javascript 更改元标记将导致旧策略和新策略都生效。
- 在 CSP 用于非 HTML 文件的情况下,元标记在技术上不能使用
推荐阅读
- javascript - Javascript:推入一个空的 3d 数组
- sql - SQL:postgreSQL 中 json_pretty() 的等价物是什么
- javascript - AngularJS $http请求不适用于长时间请求
- javascript - 尝试通过 JS 向用户发送自定义输入的电子邮件
- typescript - 自动为字段或属性创建用户定义的类型保护?
- python - 如何使用通知上有按钮的python发送Windows 10通知
- c - 如何在系统范围内安装 ac 包并将 CMake 转换为 makefile
- java - 我的线性布局只闪烁背景颜色,而不是在 Android 中持续存在
- html - 容器中具有不同背景的两列
- java - 使用 Mockito 模拟带有参数的静态 void 方法