【问题标题】:Have control over the rights of a tab/window created within a chrome extension控制在 chrome 扩展中创建的选项卡/窗口的权限
【发布时间】:2018-08-07 10:23:41
【问题描述】:

我正在开发一个 chrome 扩展,它是基于标签的,所以我正在使用 chrome.tabs API。

有一个 ma​​ster 选项卡在其中执行我经过验证的安全 JS 代码,并且它可以打开其他 child 选项卡,其中一些 JS 代码(不需要验证/保护)执行。

我需要控制我打开的 child 标签的授权。 children 选项卡应该只能使用chrome.tabs.sendMessage 发送消息。目前他们可以访问chromechrome.tabs API 的所有功能(移动标签、复制标签、打开新窗口等...),就我的扩展而言,这是一个开放的 XSS 漏洞。

问题:是否可以限制新创建标签的权限?还是默认所有的tab都拥有所有的权限,没办法控制?

https://developer.chrome.com/extensions/tabs#method-create

我想要以下内容:

const tab = chrome.tabs.create({ restrictedMethods: ['chrome.tabs.sendMessage'] })

感谢您的帮助

【问题讨论】:

  • 我的扩展就像一个迷你浏览器,你输入一些 JS 资源的 URL,它会被加载并在另一个选项卡中执行。我无法控制 children 选项卡中执行的内容,JS 代码可以是一些 React JS 应用程序代码、一些简单的 vanilla JS 或任何其他前端 javascript。这就是为什么我必须确保在选项卡上下文中,无法访问 chrome chrome.windowschrome.tabs API。
  • 到目前为止,我认为您必须使用沙盒 iframe,通过sandbox HTML 属性或sandbox declaration in manifest.json
  • 在我的主标签中: fetch(URL_OF_SOME_JS_CODE_ENTERED_BY_USER).then(code => { chrome.tabs.create({ url 'app.html' }, (tab) => { chrome.tabs.sendMessage (tab.id, 代码) }); }); app.html 文件: app.js 文件: chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { eval(request.code); }); );
  • 好的,非常感谢,这正是我需要的:)

标签: google-chrome google-chrome-extension


【解决方案1】:

可以通过在扩展程序的清单中将文件列为沙盒来阻止对chrome.* 的访问。

这样它是在一个孤立的环境中执行的。

https://developer.chrome.com/extensions/manifest/sandbox https://developer.chrome.com/extensions/sandboxingEval

非常感谢您的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 2013-02-22
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2012-04-27
    相关资源
    最近更新 更多