Javascript 从扩展中执行bookmarklet安全吗?

Javascript 从扩展中执行bookmarklet安全吗?,javascript,google-chrome,google-chrome-extension,bookmarklet,Javascript,Google Chrome,Google Chrome Extension,Bookmarklet,背景: 我编写了一个扩展来搜索书签并为用户打开URL 我已经向扩展添加了JavaScript bookmarklet支持,现在它通过类似以下代码的方式调用脚本: var bookmark_address; // the address containing javascript:blah(); var js = bookmark_address.substr(11); chrome.tabs.executeScript({'code': js}); var bookmark_address;

背景:

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

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

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});
以前我一直在使用以下代码:

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”,“”

问题:

我只是想到了安全问题。书签是由用户添加的,所以它们通常是安全的,但因为我的扩展名“调用”“脚本,它是在我的扩展的上下文中执行的。脚本将能够搞乱我的扩展的本地存储和变量。此外,执行的脚本可能有权执行跨源
XMLHttpRequest

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


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

< P>我认为最安全的解决方案是将脚本附加到脚本标签内的页面中。我认为这将最类似于正常的书签的工作方式,并且不会给代码额外的权限。然后立即删除脚本。

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

测试了跨源XHR wi下面的bookmarklet(当然附加了
javascript:
):

结果:

  • 单击书签不允许跨原点XHR
  • 使用
    chrome.tabs.update
    不允许跨原点XHR
  • 使用
    chrome.tabs.executeScript
    是否允许跨原点XHR
结论:


使用
chrome.tabs.update
执行bookmarklet基本上与正常单击书签一样安全,而
chrome.tabs.executeScript
不适合执行bookmarklet。

使用以下bookmarklet测试了跨源XHR(当然,添加了
javascript:
):

结果:

  • 单击书签不允许跨原点XHR
  • 使用
    chrome.tabs.update
    不允许跨原点XHR
  • 使用
    chrome.tabs.executeScript
    是否允许跨原点XHR
结论:

使用
chrome.tabs.update
执行bookmarklet基本上与正常单击书签一样安全,而
chrome.tabs.executeScript
不适合执行bookmarklet