修改 响应接收时使用JS(chrome扩展名)标记

问题描述 投票:0回答:1

我有一个Chrome扩展程序,可以在浮动iframe的页面中添加一个面板(点击扩展按钮)。从第三方主机下载的某些JS代码需要在该页面上执行。显然,XSS问题和扩展需要遵守该页面的内容安全策略。

以前我必须处理通过请求头传递的CSP指令,并且能够通过在chrome.webRequest.onHeadersReceived中设置钩子来覆盖它们。在那里,我将主机URL添加到content-security-policy标头。有效。标题被替换,新的指令应用于页面,一切都很好。

现在我发现通过<meta>标记设置CSP指令的网站,它们不使用请求标头。例如,iTunes https://itunes.apple.com/us/app/olympics/id808794344?mt=8中的应用页面就是这样的。还有一个名为web-experience-app/config/environment(?)的额外元标记,它有点复制了使用http-equiv="Content-Security-Policy"在标记内容中设置的值。

这次我试图将我的主机名添加到chrome.webNavigation.onCommittedonCompleted事件监听器(JS vanilla via chrome.tabs.executeScript)中的meta标签中。我还尝试从webrequest的onCompleted监听器运行相同的代码(根据https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest生命周期的最后一步)。

当我在加载后检查页面时 - 我看到元标记已经更改。但是,当我点击我的扩展程序以开始加载iframe并执行JS时 - 控制台会输出以下错误:

Refused to frame 'https://myhost.com' because it violates the following Content Security Policy directive: "frame-src 'self' *.apple.com itmss: itms-appss: itms-bookss: itms-itunesus: itms-messagess: itms-podcasts: itms-watchs: macappstores: musics: apple-musics:".

即我的标签更新无效。

我有几个问题:首先,我做得对吗?我是否在正确的活动中进行更新?何时在页面生命周期中读取元标记的数据内容?标签内容更改后会自动应用吗?

javascript google-chrome-extension meta-tags content-security-policy
1个回答
0
投票

截至2018年3月,Chromium不允许修改请求的responseBody。 https://bugs.chromium.org/p/chromium/issues/detail?id=487422#c29

“WebRequest API:允许读取响应主体的扩展”是从2015年开始的一张票。它不是一个需要解决的路径,需要一些工作/帮助。

--

Firefox具有webRequest过滤器实现,允许在应用页面的元指令之前修改响应主体。 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/filterResponseData但是,我的问题主要集中在修复Chrome扩展程序。也许Chrome有一天会选择这个。

--

总的来说,Chrome的扩展构建框架似乎不是构建长期生活软件的可靠途径;浏览器供应商经常更改规则,对新发现的威胁做出反应,没有最新支持的跨浏览器标准。

--

在我的例子中,解决这个问题的可能方法是将所有JS代码放入扩展的源代码库中。这样就没有第三方连接到获取和执行JS(并与/违反CSP规则冲突)。尚未探索过,因为我希望重用我在主浏览器应用程序中使用的代码和交互组件。

© www.soinside.com 2019 - 2024. All rights reserved.