CSP:不建议使用child-src和frame-src

Dim*_*try 7 content-security-policy

  1. 在CSP v2中,不建议使用frame-src。建议使用child-src代替。
  2. 在CSP v3 中,不赞成使用frame-src,不赞成使用child-src
  3. 目前(2017年9月)Chrome:

'child-src'指令已弃用,将于2017年8月左右在M60中删除。请改为对Workers使用'script-src'指令。

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

PS:“淘汰”甚至合法吗?

sid*_*ker 8

2018-12-20更新

child-src在此期间不推荐使用 …所以现在frame-srcchild-src不再推荐使用。但是这里原始答案的指导仍然成立:

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

似乎答案取决于您要为其指定策略的确切范围。

  1. 如果您的需求很简单,因此不想为iframe元素和脚本使用不同的策略,则只需default-src为两者指定相同的策略即可。
  2. 如果您的需求更加复杂,并且您想要的iframe元素政策与其他资源的政策不同,那就是use frame-src。同样,如果您想要的脚本策略与其他资源的策略不同,请使用script-src
  3. 如果您不希望针对工作脚本的策略与针对其他脚本的策略不同,那么只提供一个script-src策略就可以了,并且可以在此停下来。
  4. 如果确实希望工作脚本的策略不同于其他脚本的策略,则除了提供script-src策略外,还应提供worker-src策略。它worker-src不会影响浏览器,但是当浏览器确实增加支持时,它将面向未来。

如果您对不赞成使用的理由感到好奇,请参阅https://github.com/w3c/webappsec-csp/issues/239#issuecomment-336135344child-src

我希望其他供应商能够实施,worker-src以便我们可以降低平台的使用率child-src并将其从平台中删除,但是这种情况发生的速度似乎不够快(删除Chrome奇怪的后备功能会破坏0.006%的页面浏览量的工作负荷,不大,但并非没有)。


2017-09-04回答

它比问题中描述的要复杂得多,因为CSP3规范还引入worker-src指令。但是规范提供了以下指导

child-src模型已大大改变:

  1. frame-src在CSP 2级中已弃用的指令已被弃用,但child-src如果不存在,则会继续使用(default-src反过来又顺次执行)。
  2. worker-src添加了一个指令,script-src如果不存在,则将其推迟(同样也顺应default-src)。
  3. child-src 现在已弃用。

那是在https://w3c.github.io/webappsec-csp/中,这是编辑的草稿,但是您应该始终向其咨询当前的规范要求。原因:您不能相信https://www.w3.org/TR/CSP/是最新的(通常,您不能相信https://www.w3.org/TR下的任何东西都是最新的)是最新的),而编辑器的草稿则是浏览器实现者实际上要实现的目标(他们等不及要实现,直到在https://www.w3.org/TR上发布了某些内容为止)。

无论如何,child-src不推荐使用该指令的原因是其效果指定为

儿童SRC指令管辖的嵌套浏览上下文(如创建<iframe><frame>导航)和工人执行上下文。

实际上,这样做的问题是:an iframe与工作脚本完全不同。因此,这就是为什么worker-src要添加它,为什么frame-src不建议使用它(因为您确实确实希望使用单独的指令为iframe元素指定策略),以及为什么child-src不建议使用它(因为您确实不想对iframe元素和辅助脚本都应用一个策略) 。

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

似乎答案取决于您要为其指定策略的确切范围。

  1. 如果您的需求很简单,因此不想为iframe元素和脚本使用不同的策略,则只需default-src为两者指定相同的策略即可。
  2. 如果您的需求更加复杂,并且您想要的iframe元素政策与其他资源的政策不同,那就是use frame-src。同样,如果您想要的脚本策略与其他资源的策略不同,请使用script-src
  3. 如果您不希望针对工作脚本的策略与针对其他脚本的策略不同,那么只提供一个script-src策略就可以了,并且可以在此停下来。
  4. 如果确实希望工作脚本的策略不同于其他脚本的策略,则除了提供script-src策略外,还应提供worker-src策略。它worker-src不会影响浏览器,但是当浏览器确实增加支持时,它将面向未来。

PS:“淘汰”甚至合法吗?

是。尽管我不记得曾见过任何其他规范或工作组这样做过,但在这种情况下这是正确的做法-因为CSP规范作者和工作组意识到这child-src是一个错误,并且frame-src实际上是必要的,而且不赞成使用的错误。

因此,他们可以相对迅速地消除这些错误。它在这种情况下起作用的部分原因是:frame-src弃用时间不够长,浏览器无法支持它,而且很多Web开发人员从未child-src开始使用。