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

次のブックマークレットを使用してクロスオリジン 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 は許可されません。
  • を使用しても、クロスオリジン XHR は許可さchrome.tabs.updateれません。
  • を使用すると、クロスオリジン XHRchrome.tabs.executeScript が許可されます。

結論:

を使用chrome.tabs.updateしてブックマークレットを実行することは、基本的に通常のブックマークをクリックするのと同じくらい安全ですが、ブックマークレットの実行にchrome.tabs.executeScriptは適していません。

于 2013-02-20T10:56:50.993 に答える
0

最も安全な解決策は、スクリプトタグ内のページにスクリプトを追加することだと思います。これは通常のブックマークレットの動作と最もよく似ており、コードに追加のアクセス許可を与えることはないと思います。スクリプトをすぐに削除するとさらに良い場合があります。

于 2013-02-20T07:27:56.740 に答える