Javascript 从扩展中执行bookmarklet安全吗?
背景: 我编写了一个扩展来搜索书签并为用户打开URL 我已经向扩展添加了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;
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