Chrome 是否违反了内容安全政策?

dis*_*kit 5 firefox google-chrome-extension content-script content-security-policy

我为 chrome 和 firefox 制作了一个浏览器扩展。firefox 是使用Web 扩展 API开发的因此这两个扩展中的代码差异很小。作为扩展中的一个重要功能,一些 HTML 元素通过内容脚本成为网页的一部分。这还涉及加载托管在某些服务器上并通过 https 提供的图像。现在,当扩展在 twitter 和 github 上运行时,这些图像在 chrome 中加载良好。但是,有趣的是,当相应的扩展在 twitter 和 github 上运行时,图像根本没有加载到 firefox 中。更有趣的是,twitter 在其响应标头中设置的内容脚本策略禁止该图像加载,因此 firefox 的行为是正确的。所以,我的问题基本上是 Chrome 是否在这里违反了 CSP?

在此处附加 twitter 设置的 csp--

script-src 'nonce-j0G​​K1zjoBy82/ZWhR7gw+g==' https://connect.facebook.net https://cm.g.doubleclick.net https://ssl.google-analytics.com https://graph .facebook.com https://twitter.com 'unsafe-eval' https:// .twimg.com https://api.twitter.com https://analytics.twitter.com https://publish.twitter。 com https://ton.twitter.com https://syndication.twitter.com https://www.google.com https://t.tellapart.com https://platform.twitter.com https:// www.google-analytics.com '自我';框架祖先“自我”;字体-SRC https://twitter.com的https:// .twimg.com数据:https://ton.twitter.com https://fonts.gstatic.com https://maxcdn.bootstrapcdn.com https://netdna.bootstrapcdn.com 'self'; media-src https://twitter.com https:// .twimg.com https://ton.twitter.com blob: 'self'; connect-src https://graph.facebook.com https:// .giphy.com https:// .twimg.com https://pay.twitter.com https://analytics.twitter.com https:// media.riffsy.com https://upload.twitter.com https://api.mapbox.com 'self'; style-src https://fonts.googleapis.com https://twitter.com https: //.twimg.com https://translate.googleapis.com https://ton.twitter.com'unsafe-inline' https://platform.twitter.com https://maxcdn.bootstrapcdn.com https://netdna.bootstrapcdn.com 'self'; object-src https://twitter.com https://pbs.twimg.com ; 默认-src '自我';frame-src https://staticxx.facebook.com https://twitter.com https: //.twimg.com https://player.vimeo.com https://pay.twitter.com https://www .facebook.com https://ton.twitter.com https://syndication.twitter.com https://vine.co推特:https : //www.youtube.com https://platform.twitter.com https ://upload.twitter.com https://s-static.ak.facebook.com '自我'https://donate.twitter.com ; IMG-SRC https://graph.facebook.com https://开头.giphy.com https://twitter.com https://开头.twimg.com数据:https://fbcdn-profile-a.akamaihd.net https://www.facebook.com https://ton.twitter.com https: //.fbcdn.net https://syndication.twitter.com https://media.riffsy.com https://www。 google.com https://stats.g.doubleclick.net https://*.tiles.mapbox.com https://www.google-analytics.com blob: 'self'; 报告-uri https://twitter.com/i/csp_report?a=NVQWGYLXFVZXO2LGOQ%3D%3D%3D%3D%3D%3D&ro=false ;

请注意这里的“img-src”。另一个困扰我的问题是该扩展程序在清单文件中还指定了自己的内容脚本策略。这两项政策如何协同作用?

Xan*_*Xan 1

如果扩展程序确实愿意,则可以覆盖页面的 CSP,但假设没有此类响应标头手术,页面的 CSP 仍然受到大多数尊重。

我最近就扩展中的 CSP做出了回答,并将在此处部分复制它:

扩展中有 3 个 CSP 在发挥作用:

  • content_security_policy指令仅适用于扩展程序自己的页面(例如后台页面)。如果未指定,则默认为,script-src 'self'; object-src 'self'并且对其修改方式有一些限制。

  • 内容脚本上下文不受此 CSP 的约束。unsafe-eval不受限制(因为无论如何您都可以使用executeScript任意代码),但是,内联脚本和远程脚本限制不适用于内容脚本,因为:

  • 页面 DOM 中的任何脚本,无论是内联脚本还是标签脚本,都在页面本身<script src="...">的上下文中执行,并且受页面本身的 CSP约束。恰恰有一个例外,在页面中注入 a将绕过内联代码限制立即执行<script> /* code */ </script>

请注意,所有这些都涵盖了脚本。我不确定图像如何受到影响。我不知道有任何文档涵盖此内容。

请注意,扩展通常会覆盖某些 Web 安全功能,例如 CORS。

  • 它很危险,因为它非常强大。能力越大,责任越大(以及安装时警告)。这完全取决于你如何使用它。有一些专门的扩展可以将 CSP 作为其_功能_进行操作,这非常棒。但是,如果您的扩展随意覆盖 CSP 只是为了提供不相关的功能,则可能是鲁莽的矫枉过正。或者,也许这是它发挥作用的唯一方式 - 但责任在于你。 (2认同)