代码之家  ›  专栏  ›  技术社区  ›  ssc-hrep3

内容安全策略(CSP)头:放在每个文件上还是只放在实际的HTML页面上?

  •  5
  • ssc-hrep3  · 技术社区  · 5 年前

    我正在将内容安全策略(CSP)头添加到我们的应用程序中。我想知道标题必须附加到哪些文件上。经过一些研究,我没有找到一个明确的答案。

    Twitter,例如只将其添加到实际的HTML文档中。然而,Facebook将其添加到几乎所有资源和HTML文档(HTML、JS、CSS等)中。

    那么,是否需要将内容安全策略头添加到每个服务的资源文件中,或者只添加到HTML文档中?它如何处理Ajax(JSON内容)请求?它如何与水疗(只有 index.html 文件还是所有资源?如果从安全角度看不需要,我不想通过在每个文件中添加长的CSP头来降低页面速度。

    编辑:

    澄清:当图像或其他非文档资源附带了CSP头文件时,浏览器对它们的处理是否不同?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Martin Asuquo12    5 年前

    CSP并不是针对内容注入漏洞的第一道防线。

    新答案II

    问题:

    澄清:当图像或其他非文档资源附带了CSP头文件时,浏览器对它们的处理是否不同?

    我的回答是:

    • 首先,定义 非文件 “?W3(设置互联网实际工作方式的人)有一个 definition of "document" 我假设你的定义是一样的。

      如果没有,请相应澄清。

    W3内容安全政策规则(截至2018年10月)规定 the goals of CSP 目的是:

    • 通过为开发人员提供对以下内容的相当精细的控制,降低内容注入攻击的风险:

      • 可以代表特定文档或工作人员请求(随后嵌入或执行)的资源

      • 内联脚本的执行

      • 动态代码执行(通过eval()和类似的构造)

      • 内联样式的应用

    • 降低需要资源嵌入恶意环境的攻击风险(描述的“像素完美”攻击 例如,在[计时]中,通过向开发人员提供对 可以嵌入给定资源的源。

    • 提供一个允许开发人员降低其应用程序特权的策略框架。

    • 提供一种报告机制,允许开发人员检测在野外开发的缺陷。

    注1(i);

    “可以代表特定的 文件或工人

    文档的定义如上所述,工作的定义基本上是使用javascript dom模型。( 这可能不正确 )

    因此,CSP应适用于 文件 (给定的)和 工人 .

    其他文件(MP3、PDF等)是文件还是工人?它们不是文档,而是在浏览器中处理它们的方式 是否意味着它们包含在文档结构中 .

    请看这个 old Chrome Bug report .由于网站的CSP设置,PDF无法加载内容,并且PDF实际上是由浏览器插件(所有现代浏览器的本机插件)加载的,因此受 object-src CSP。

    这是csp版本1,我没有理由认为浏览器处理非文档文件的方式或者csp集成的方式在提交该bug后发生了显著变化。

    因此:浏览器不是 必修的 要将CSP应用于非文档对象和非工作对象,但由于浏览器的操作方式,它们可能会将CSP头应用于非文档对象和非工作对象,因为这些对象将包装在文档模型中,以便于浏览器在其内部处理文件。

    但是 这是浏览器的编码问题,预计2018年10月不会出现。

        2
  •  0
  •   benvc    5 年前

    支持 HTTP Content Security Policy response header 将阻止为响应头或元标记包含内容安全策略指令的任何页面加载图像(和其他内容),这些指令限制被视为有效内容源的域,要求通过https等加载所有内容。 Most widely used modern browsers support Content Security Policy 并将其应用于控制与任何HTTP请求相关联的大部分内容资源(包括图像)(但Safari和IE不支持Web Worker资源控制,边缘或Opera可能不支持)。

    您可以特别包括 img-src 内容安全策略中的策略指令,用于限制被视为图像有效源的域,以及要求使用HTTPS方案等。还可以为各种其他资源(包括字体、帧、媒体(音频、视频等)、脚本、样式表、Web工作者等)提供特定的指令。

    您要么需要将内容安全策略作为HTTP响应头的一部分,作为每个HTTP请求的一部分从Web服务器返回,以限制有效的内容源,要么确保请求的页面包含内容安全策略元标记,如…

    <meta http-equiv="Content-Security-Policy" content="default-src 'self';">
    

    请注意,IE10+浏览器支持内容安全策略响应头,但不支持元标记(如果要支持IE,还需要注意一些具体的实现细节)。