为啥“首选”通过标头传递 Content-Security-Policy?

Posted

技术标签:

【中文标题】为啥“首选”通过标头传递 Content-Security-Policy?【英文标题】:Why is delivery of Content-Security-Policy via headers "preferred"?为什么“首选”通过标头传递 Content-Security-Policy? 【发布时间】:2019-09-24 05:22:00 【问题描述】:

3. CSP Policy Delivery 上面写着

Content-Security-Policy HTTP 响应头字段是传递策略的首选机制

但是有两种有效的机制,通过 HTTP 标头传递,以及通过 html meta 元素传递:

<meta http-equiv="Content-Security-Policy" content="..."/>

为什么“首选”通过标头传递,或者更重要的是,通过 HTML meta 标记传递的缺点是什么?

由于各种原因,在我们的部署中,将 CSP 添加到 HTML 头部更易于管理。

【问题讨论】:

***.com/questions/42444106/… 是相关的,但没有解决这个问题。 而且,继续评论我自己的问题,我意识到 http-equiv 元标记应该首先出现在标题中,因为它只适用于它后面的元素(所以也许这是一个原因“更喜欢”一个 http 标头...) 那和元标记的限制根据注释。 “元元素内不支持 Content-Security-Policy-Report-Only 标头。report-uri、frame-ancestors 和沙盒指令也不支持。” @Alohci 所说的。但是,如果使用 meta 元素而不是 HTTP 标头对您来说没有任何可观察到的问题,并且正如您所说的在部署中更容易管理,那么使用 HTTP 标头对您来说没有任何优势。特别是如果您没有使用 Content-Security-Policy-Report-Only 标头并且没有使用 report-uri、frame-ancestors 或沙盒指令,那么只需在每个文档中指定元元素而不是使用HTTP 标头。 @Alohci,如果您发表评论作为答案,我会接受它,因为它看起来合适。 【参考方案1】:

这个问题好像cmet里已经有答案了,但是没人有几分钟的时间来写回复,我自己试试吧。

Content-Security-Policy 通过 HTTP 响应交付与通过 HTML 元元素交付相比支持一些额外的功能,例如 Content-Security-Policy-Report-Onlyreport-uri frame-ancestors沙盒指令

但是,如果您不需要使用任何这些功能,则使用 HTTP 标头没有任何优势。

注意,使用 HMTL 方式时,http-equiv 元标记应首先出现在标题中,因为它仅适用于其后的元素。

【讨论】:

以上是关于为啥“首选”通过标头传递 Content-Security-Policy?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该在 `Authorization: Bearer` 标头中发送令牌?

为啥不能通过 IIS7 中的 web.config 删除“服务器”响应标头?

为啥 JWT 需要作为 Bearer Token 标头发送?

为啥加特林不将身份验证令牌从 POST 返回正文发布到 GET 标头

如何将请求标头信息传递给 Angular6 应用程序(JWT 通过请求标头发送)

如何让不记名令牌通过rails中的标头传递?