バックグラウンド:
ブックマークを検索し、ユーザーの 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
。 (ドキュメント)
私はそれを正しく考えていますか?本当にセキュリティ上の問題はありますか?拡張機能からスクリプトの実行を「サンドボックス化」したり、スクリプトのアクセス許可を無効にしたりする方法はありますか?
拡張機能のユーザーにとって非常に悪いことになる可能性があるため、問題を真剣に検討してください。