ユーザーのプライバシーを保護する

拡張機能がプライバシーを侵害したり、必要と思われる以上の権限をリクエストしたりすると、ユーザーはインストールしなくなります。権限のリクエストはユーザーにとって理にかなったものでなければならず、またリクエストの対象とする情報は、拡張機能の実装に不可欠なものに限定する必要があります。ユーザーデータを収集または送信する拡張機能は、ユーザーのプライバシー保護に関するポリシーを遵守する必要があります。

拡張機能のユーザーを保護し、尊重するために、ユーザーの身元を安全に保つための注意事項を記載してください。

必要な権限を減らす

拡張機能がアクセスできる API は、permissions フィールドの manifest で指定します。付与される権限が多いほど、攻撃者が情報を傍受する手段が増えます。拡張機能が依存する API のみをリストし、侵襲性の低いオプションを検討する必要があります。拡張機能がリクエストする権限が少ないほど、ユーザーに表示される権限に関する警告が少なくなります。警告が少ない拡張機能ほど、ユーザーにインストールしてもらえる可能性が高くなります。

拡張機能は、現時点では必要ないものの、将来実装する可能性のある権限をリクエストして、ユーザーデータへのアクセスを「将来に備える」べきではありません。拡張機能のアップデートで新しい権限を追加する場合は、それらをオプションにすることを検討してください。

activeTab

ホスト権限を使用してスクリプトを挿入する拡張機能では、多くの場合、代わりに activeTab を使用できます。activeTab 権限により、ユーザーが拡張機能を呼び出した場合にのみ、現在アクティブなタブに一時的にアクセスできます。 ユーザーが現在のタブから移動したり、閉じたりすると、アクセスは遮断されます。これは、<all_urls> の多くの用途の代替となります。

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
  "permissions": ["activeTab"],
  "manifest_version": 3
}

activeTab 権限では、インストール中に警告メッセージは表示されません。

オプションの権限を選択する

オプションの権限を含めることで、ユーザーは拡張機能に必要な機能と権限を選択できます。拡張機能のコア機能に不可欠でない機能は、オプションにして、API またはドメインを optional_permissions フィールドに移動します。

{
  "name": "Very Secure Extension",
  ...
  "optional_permissions": [ "tabs", ],
  "optional_host_permissions": ["https://www.google.com/" ],
  ...
}

オプションの権限を含めることで、ユーザーが関連機能を有効にしたときに、拡張機能が特定の権限を必要とする理由を説明できます。拡張機能では、機能を有効にするオプションをユーザーに提供できます。

権限を有効にするよう求めるポップアップのスクリーンショット

[OK] をクリックすると、Service Worker で次のイベントがトリガーされます。

chrome.action.onClicked.addListener((event) => {
  // Permissions must be requested from inside a user gesture, like a button's
  // click handler.
  chrome.permissions.request(
    {
      permissions: ["tabs", "scripting"],
      origins: ['https://www.google.com/']
    },
    function (granted) {
      // The callback argument will be true if the user granted the permissions.
      if (granted) {
        // doSomething();
      } else {
        // doSomethingElse();
      }
    }
  );
});

ユーザーには次のリクエストが表示されます。

省略可能な権限リクエストのスクリーンショット。

オプションの権限は、拡張機能のアップデートで実装することもできます。これにより、新しい必須権限で更新した場合に発生する可能性があるように、拡張機能を無効にすることなく、ユーザーが新しい機能を利用できるようになります。

ユーザー情報を制限して保護する

拡張機能に必要な最小限のデータのみをリクエストします。拡張機能がユーザーに求める情報が少ないほど、拡張機能が侵害された場合のリスクが軽減されます。

リクエストされたユーザーデータはすべて慎重に扱う必要があります。登録済みドメインを持つ安全なサーバーにデータを保存して取得します。常に HTTPS を使用して接続し、拡張機能のストレージは暗号化されていないため、拡張機能のクライアント側に機密性の高いユーザーデータを保存しないでください。

データの保存とシークレット モード

拡張機能は、Storage API を使用してデータを保存したり、サーバー リクエストを行ってデータを保存したりできます。拡張機能で何かを保存する必要がある場合は、まずシークレット ウィンドウから保存するかどうかを検討します。デフォルトでは、拡張機能はシークレット ウィンドウでは実行されません。

シークレット モードでは、ウィンドウに履歴が残らないことが保証されます。 シークレット ウィンドウのデータを扱う場合、拡張機能はこの保証を尊重する必要があります。拡張機能が通常閲覧履歴を保存する場合は、シークレット ウィンドウの履歴を保存しないでください。ただし、拡張機能は、シークレット ウィンドウかどうかに関係なく、どのウィンドウからでも設定の優先順位を保存できます。

ウィンドウがシークレット モードかどうかを検出するには、関連する tabs.Tabまたはwindows.Windowオブジェクトのincognitoプロパティを確認します。

function saveTabData(tab) {
  if (tab.incognito) {
    return;
  } else {
    chrome.storage.local.set({data: tab.url});
  }
}