我为chrome和firefox做了一个浏览器扩展。 firefox是使用Web Extension APIs开发的,因此这两个扩展中的代码差异很小。作为扩展中的一个重要功能,一些HTML元素通过内容脚本成为网页的一部分。这还涉及加载托管在某些服务器上并通过https提供的图像。现在,当扩展程序在twitter和github上运行时,这些图像在chrome中加载正常。但是,有趣的是,当相应的扩展程序通过twitter和github运行时,在Firefox中根本没有加载图像。更有趣的是,twitter在其响应头中设置的content-script-policy禁止图像加载,因此firefox正常运行。所以,我的问题基本上是Chrome是否违反了CSP?
通过twitter附加csp设置 -
script-src' nonce-j0GK1zjoBy82 / 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 {{3} } https://platform.twitter.com' self&#39 ;;框架 - 祖先' self&#39 ;; font-src https://www.google-analytics.com https:// .twimg.com数据:https://twitter.com https://ton.twitter.com https://fonts.gstatic.com https://maxcdn.bootstrapcdn.com' self' ; media-src https://netdna.bootstrapcdn.com https:// .twimg.com https://twitter.com blob:' self&#39 ;; connect-src https://ton.twitter.com https:// .giphy.com https:// .twimg.com https://graph.facebook.com https://pay.twitter.com https://analytics.twitter.com {{3} } https://media.riffsy.com' self&#39 ;; style-src https://upload.twitter.com https://api.mapbox.com https:// .twimg.com https://fonts.googleapis.com https://twitter.com' unsafe-inline' https://translate.googleapis.com https://ton.twitter.com https://platform.twitter.com' self&#39 ;; object-src https://maxcdn.bootstrapcdn.com https://netdna.bootstrapcdn.com; default-src' self&#39 ;; frame-src https://twitter.com https://pbs.twimg.com https:// .twimg.com https://staticxx.facebook.com https://twitter.com https://player.vimeo.com https://pay.twitter.com https://www.facebook.com { {3}} twitter:https://ton.twitter.com https://syndication.twitter.com https://vine.co https://www.youtube.com' self' https://platform.twitter.com; img-src https://upload.twitter.com https:// .giphy.com https://s-static.ak.facebook.com https:// .twimg.com数据:https://donate.twitter.com https://graph.facebook.com {{ 3}} https:// .fbcdn.net https://twitter.com https://fbcdn-profile-a.akamaihd.net https://www.facebook.com https://ton.twitter.com https://*.tiles.mapbox.com {{3} } blob:' self&#39 ;; report-uri https://syndication.twitter.com;
请注意" img-src"在这。困扰我的另一个问题是扩展程序还在清单文件中指定了自己的内容脚本策略。这两项政策如何共同发挥作用?
答案 0 :(得分:1)
扩展可以覆盖页面的CSP,如果他们真的想要,但假设没有这样的响应 - 标题手术,页面的CSP仍然主要受到尊重。
我最近就CSP in extensions做了回答,并在此部分重现:
扩展中有3个CSP正在发挥作用:
content_security_policy
指令仅适用于扩展程序自己的页面(例如后台页面)。如果未指定,则默认为script-src 'self'; object-src 'self'
且some restrictions on how it can be modified.内容脚本上下文不受此CSP约束。
unsafe-eval
is unrestricted(因为您可以使用任意代码执行executeScript
),但是,内联脚本和远程脚本限制不适用于内容脚本,因为:页面DOM中的任何脚本,无论是内联还是
<script src="...">
标记都是在页面本身的上下文中执行的,并且受 CSP的约束页面本身。只有一个例外,在页面will bypass inline code restrictions中为{em>立即执行执行<script> /* code */ </script>
注入E:\MAMP\htdocs\frontend\public
。
请注意,所有这些都涵盖脚本。我不确定 images 是如何受到影响的。我不知道任何涉及此事的文档。
请注意,扩展通常会覆盖某些Web安全功能,例如CORS。