1

背景:從擴展中執行書籤是否安全?

我寫了一個擴展來搜索書籤並打開用戶的URL。

我已經添加書籤的JavaScript支持擴展,現在它是由類似這樣的東西代碼調用腳本:

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}); 

以前我曾使用此代碼被第一個看起來更好,但實際上並沒有太大的區別。他們都需要權限["tabs", "<all_urls>"]。我現在只在用戶選擇啓用小書籤支持時請求權限(由optional permissions)。

問題:

我只是想安全問題。書籤由用戶添加,因此它們通常是安全,但是因爲我的擴展名「調用」腳本,所以它在我的擴展的上下文中執行。該腳本將能夠搞亂我的擴展的本地存儲和變量。 此外,執行的腳本可能有權執行跨源XMLHttpRequest(Docs)

我是否正確地思考?是否真的有安全問題?有沒有辦法從我的擴展中「沙箱」執行腳本,和/或禁用腳本的權限?

對於擴展的用戶來說這可能是一件非常糟糕的事情,所以請認真思考問題。

回答

1

測試跨來源XHR具有以下書籤(當然與javascript:所附):

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執行的bookmarklet基本上是爲點擊書籤通常是安全的,而chrome.tabs.executeScript適合於執行的bookmarklet。

0

我認爲最安全的解決方案是將腳本追加到腳本標籤內的頁面。我認爲這與普通的書籤工作方式最爲相似,並且不會賦予代碼額外的權限。如果腳本被立即刪除,這可能會更好。