1

背景:

我写了一个扩展来搜索书签并为用户打开 URL。

我已经为扩展添加了 JavaScript 小书签支持,现在它通过类似于以下代码的方式调用脚本:

var bookmark_address; // the address containing javascript:blah();
var js = bookmark_address.substr(11);
chrome.tabs.executeScript({'code': js});

以前我一直在使用这段代码:

var bookmark_address; // the address containing javascript:blah();
chrome.tabs.update({'url': bookmark_address});

第一个似乎更好,但实际上它们并没有太大区别。他们都需要权限["tabs", "<all_urls>"]。我现在仅在用户选择启用书签支持(通过可选权限)时才请求权限。

问题:

我只是想到了安全问题。书签是由用户添加的,因此它们通常是安全的,但是因为我的扩展程序“调用”了脚本,所以它是在我的扩展程序的上下文中执行的。该脚本将能够弄乱我的扩展程序的本地存储和变量。此外,执行的脚本可能具有执行 Cross-Origin 的权限XMLHttpRequest (文档)

我的想法正确吗?真的有安全问题吗?有没有办法从我的扩展程序“沙箱”执行脚本,和/或禁用脚本的权限?

对于扩展程序的用户来说,这可能是一件非常糟糕的事情,所以请认真考虑这个问题。

4

2 回答 2

1

javascript:使用以下书签(当然附加)测试了跨域 XHR :

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
        console.log(xhr.responseText);
    }
};
xhr.open("POST", "http://jsfiddle.net/echo/json/", true);
xhr.send("json=" + encodeURIComponent(JSON.stringify({"foo": "bar"})));

结果:

  • 单击书签不允许跨域 XHR。
  • 使用chrome.tabs.update不允许跨域 XHR
  • 使用chrome.tabs.executeScript 确实允许跨域 XHR。

结论:

用于chrome.tabs.update执行小书签基本上和正常点击书签一样安全,但chrome.tabs.executeScript适合执行小书签。

于 2013-02-20T10:56:50.993 回答
0

我认为最安全的解决方案是将脚本附加到脚本标签内的页面。我认为这将与普通书签的工作方式最相似,并且不会给代码额外的权限。如果随后立即删除脚本可能会更好。

于 2013-02-20T07:27:56.740 回答