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

时间:2019-01-15 17:12:16

标签: content-security-policy

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

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

因此,是否有必要将内容安全策略标头添加到每个提供的资源文件或仅添加到HTML文档?它如何处理Ajax(JSON内容)请求?它如何与SPA(仅index.html文件或所有资源)一起使用?如果不想从安全角度考虑,我不想通过在每个文件中添加较长的CSP标头来减慢页面速度。

编辑:

要澄清:当浏览器附带了CSP标头时,浏览器是否会区别对待图像或其他非文档资源?

4 个答案:

答案 0 :(得分:2)

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

...

新答案II

问题:

  

要澄清:当浏览器附带了CSP标头时,浏览器是否会区别对待图像或其他非文档资源?

我的答案:

  • 首先,定义“ 非文档”? W3(负责设置互联网实际运行方式的人)的名字为definition of "document",我认为您的定义是相同的。

    如果不是,请进行相应说明。

《 W3内容安全政策规则》(截至2018年10月)规定the goals of CSP将:

  
      
  • 通过为开发人员提供对以下内容的相当细致的控制来减轻内容注入攻击的风险:

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

    •   
    • 内联脚本的执行

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

    •   
    • 内联样式的应用

    •   
  •   
  • 减轻遭受攻击的风险,这需要将资源嵌入恶意上下文中(描述为“像素完美”攻击   例如,在[TIMING]中)   可以嵌入给定资源的来源。

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

  •   
  • 提供一种报告机制,使开发人员可以检测野外被利用的缺陷。

  •   

注意点1(i);

  

“可以代表特定的文档或工作者请求(然后嵌入或执行)的资源”

文档的定义如上,本质上,作品定义为使用Javascript DOM模型的东西(这可能是不正确的)。

因此,CSP有望应用于文档(给定)和 workers

其他(MP3,PDF等)文件是文档还是辅助文件?它们不是文档,但是在浏览器中的处理方式暗示它们包含在文档结构中

请参阅此old Chrome Bug report。由于网站的CSP设置,PDF无法加载内容,并且该PDF实际上是由浏览器插件(对于所有现代浏览器而言都是本地的)加载的,因此受object-src CSP的影响。

这是CSP版本1,自从该错误提交以来,我没有理由认为浏览器处理非文档文件的方式或CSP集成的方式已发生重大变化。

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

但是这是由于浏览器的编码问题造成的,预计从2018年10月起不会出现。

答案 1 :(得分:2)

我的问题的正确答案为an answer to another, similar question。它指的是CSP规范,该规范明确指出,该策略仅影响创建新“执行上下文”的资源。这意味着没有必要将CSP添加到REST API响应中。请参考the correct answer或直接参考the specification of W3,其中也包含一个表,说明如何处理不同的资源(例如脚本,图像等)。

答案 2 :(得分:0)

支持HTTP Content Security Policy response header的浏览器将阻止为响应页眉或元标记包含内容安全策略指令的任何页面加载图像(和其他内容),这些指令限制了被视为有效内容源的域,并要求所有内容通过HTTPS等Most widely used modern browsers support Content Security Policy进行加载,并将其应用于控制与任何HTTP请求关联的大多数内容资源(包括图像)(但Safari和IE中不支持Web Worker资源控制,并且可能不在Edge或Opera中受支持)。

您可以在内容安全策略中专门包含img-src策略指令,以限制被认为是图像有效源以及要求使用HTTPS方案等的域。还有其他一些特定指令可用于资源,包括字体,框架,媒体(音频,视频等),脚本,样式表,网络工作者等。

您可能需要将内容安全策略作为从Web服务器返回的HTTP响应标头的一部分,作为每个HTTP请求的一部分,其中您希望限制有效内容来源,或者确保请求的页面包含内容安全策略元标记,例如...

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

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

答案 3 :(得分:0)

  

通过在每个文件中添加较长的CSP标头来减慢页面速度

据说状态为 304未修改-CSP标头未发送
-仅在初始加载时