0

从 OWASP 的网站 https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html

从您的 Web 服务器发送 Content-Security-Policy HTTP 响应标头。

内容安全策略:...

使用标头是首选方式,并且支持完整的 CSP 功能集。在所有 HTTP 响应中发送它,而不仅仅是索引页面。

我不明白这怎么可能是真的,因为可以通过在 HTML 中使用元标记来设置 Content-Security-Policy。我也看不出该政策如何适用于 HTML 页面以外的任何其他内容。

有谁知道为什么要做出上述声明以及仅发送 HTTP 标头Content-Security-Policy进行text/html响应是否安全?

顺便说一句,策略太大了,我想发送尽可能少的字节。

4

2 回答 2

2

这仍然是没有正式指定的东西,对此仍有一些争论:https ://github.com/w3c/webappsec/issues/520

一般来说,这里有两个论点:

一方面,其他一些文件类型(XML、PDF,甚至可能是 SVG)可以从 CSP 中受益,并且任何资源都可以通过右键单击并在单独的选项卡中打开来成为页面。

另一方面,CSP 可能会变得非常大,并且通常是为 HTML 页面编写的。所以发送其他资源有点浪费,而且大部分都不相关。

正确的答案(如上所述)可能是对所有非 HTML 响应减少且非常严格的 CSP。

但我认为对于大多数人来说,仅将它放在 HTML 上就足够了,并带来了 CSP 的大部分好处。再一次,CSP 是一种先进的技术,所以如果能做到这一点,那为什么不正确地做呢?

于 2021-10-28T12:46:40.037 回答
2

使用标头是首选方式,它支持完整的 CSP 功能集

我不明白这怎么可能是真的,因为可以通过在 HTML 中使用元标记来设置 Content-Security-Policy。

  1. 元标记内不支持以下指令:
  • report-toreport-uri
  • frame-ansectors
  • sandox
  1. 此外元标记不支持Content-Security-Policy-Report-Only功能,只有Content-Security-Policy.

  2. 在 HTML 代码中的 meta 标签之前开始加载的所有资源都不受 CSP 的影响。恶意脚本可以作为该<head>部分的第一项在元标记之前注入

  3. 暴露在元标记中,nonce-value因此可以很容易地被脚本窃取和重用。

  4. 使用元标记您只能为 HTML 页面设置 CSP,但 CSP 应用于 XML 页面中的 XSLT 和一些其他类型的内容(见下文)。

因此,确实 HTTP 标头是传递 CSP 的首选方式,并且通过元标记使用 CSP 不允许您使用完整的 CSP 功能集

在所有 HTTP 响应中发送它,而不仅仅是索引页面

我也看不出该政策如何适用于 HTML 页面以外的任何其他内容。

规范考虑了一点不同 - 您应该发送带有 HTML 内容的任何响应页面的 CSP,不仅是 for 200 OK,甚至是 for404 Not found 403 Access Forbidden等。
因为这些页面可以访问cookieCSP 未涵盖的页面中的内容。

CSP 不仅适用于 HTML 页面,而且适用于 XML 页面中的 XSLT,适用于工作人员的外部 javascripts 文件(在Firefox中)。CSP HTTP 标头的指令也frame-ancestors适用于旨在嵌入 iframe 的任何内容(JPEG/GIF/PNG/PDF/MP4/等),请参阅此处的细节。

于 2021-10-29T07:35:40.400 回答