CSP:不推荐使用child-src和frame-src

时间:2017-09-04 14:20:50

标签: content-security-policy

  1. 在CSP第2版中,不推荐使用 frame-src 。建议使用 child-src
  2. 在未推荐的CSP v3 frame-src 中,不推荐使用 child-src
  3. 目前(2017年9月)Chrome:
  4.   

    ' child-src'指令已弃用,将于2017年8月左右在M60中删除。请使用' script-src'相反,工人指令。

    那么在现代(减去2个版本)浏览器中使用的正确指令集是什么?看起来像 frame-src + script-src 就足够了?但是 script-src 应该是什么呢?

    PS:对于" undeprecate"甚至是合法的东西?

1 个答案:

答案 0 :(得分:6)

2018-12-20更新

child-src同时been un-deprecated ...所以现在frame-srcchild-src都不再被弃用了。但这里原始答案的指导仍然适用:

  

那么在现代(减去2个版本)浏览器中使用的正确指令集是什么?

似乎答案取决于您究竟要为其指定政策。

  1. 如果您的需求很简单,因此您不希望对iframe元素和脚本制定不同的策略,那么只需使用default-src为两者指定相同的策略。
  2. 如果您的需求更复杂,并且您希望iframe元素的策略与其他资源的策略不同,则使用frame-src。同样,如果您希望脚本的策略与其他资源的策略不同,请使用script-src
  3. 如果您不希望工作程序脚本的策略与其他脚本的策略不同,那么您只需提供script-src策略即可,并且可以在此处停止。
  4. 如果您 希望工作人员脚本的策略与其他脚本的策略不同,那么在提供script-src策略的同时,也要提供worker-src策略。 worker-src一个版本不会影响浏览器,但是当浏览器确实添加支持时,它们将面向未来。
  5. 如果您对child-src未被弃用的理由感到好奇,请参阅https://github.com/w3c/webappsec-csp/issues/239#issuecomment-336135344

      

    我希望其他供应商能够实施worker-src,以便我们可以降低child-src的使用率并将其从平台中移除,但它看起来不会很快发生足够(删除Chrome的奇怪后备将在0.006%的页面浏览量中打破工人负载,这不是很大,但不是没有)。

    2017-09-04回答

    它甚至比问题中描述的更复杂,因为CSP3规范还引入了the worker-src directive。但规范给出了the following guidance

      

    child-src模型已经大幅改变:

         
        
    1. 在CSP级别2中已弃用的frame-src指令尚未过时,但如果不存在,则继续推迟到child-src(依次推迟到default-src)。< / LI>   
    2. 添加了worker-src指令,如果不存在则推迟到script-src(同样依次推迟到默认-src)。
    3.   
    4. child-src现已弃用。
    5.   

    那是https://w3c.github.io/webappsec-csp/,这是编辑的草稿,但你应该总是参考当前的规范要求。理由:您不能相信https://www.w3.org/TR/CSP/是最新的(通常您不能相信https://www.w3.org/TR下的任何内容是最新的),编辑的草稿是浏览器实现者实际实现的(他们不等待实施,直到https://www.w3.org/TR下发布的内容。)

    无论如何,child-src指令被弃用的原因是its effect is specified as

      

    child-src 指令控制嵌套浏览上下文(例如<iframe><frame>导航)和工作人员执行上下文的创建。

    实践中的问题是:iframe与工作脚本非常不同。这就是为什么添加worker-src以及为什么frame-src未被弃用的原因(因为您确实需要一个单独的指令来指定iframe元素的策略),以及为什么child-src是不推荐使用(因为您实际上不希望将一个策略应用于iframe元素和工作程序脚本。)

      

    那么在现代(减去2个版本)浏览器中使用的正确指令集是什么?

    似乎答案取决于您究竟要为其指定政策。

    1. 如果您的需求很简单,因此您不希望对iframe元素和脚本制定不同的策略,那么只需使用default-src为两者指定相同的策略。
    2. 如果您的需求更复杂,并且您希望iframe元素的策略与其他资源的策略不同,则使用frame-src。同样,如果您希望脚本的策略与其他资源的策略不同,请使用script-src
    3. 如果您不希望工作程序脚本的策略与其他脚本的策略不同,那么您只需提供script-src策略即可,并且可以在此处停止。
    4. 如果您 希望工作人员脚本的策略与其他脚本的策略不同,那么在提供script-src策略的同时,也要提供worker-src策略。 worker-src一个版本不会影响浏览器,但是当浏览器确实添加支持时,它们将面向未来。
    5.   

      PS:对于&#34; undeprecate&#34;甚至是合法的东西?

      是。虽然我不记得曾见过任何其他规范或工作组这样做,但在这种情况下这是正确的 - 因为CSP规范作者和工作组意识到child-src是一个错误,{{{ 1}}实际上是必要的,弃用它是错误的。

      所以他们解除了这些错误 - 并且相对较快。在这种情况下它工作原因的一部分原因是:frame-src并没有被弃用足够长的时间以至于浏览器不能放弃对它的支持,而且许多Web开发人员也从未使用{{1}开头。