TOOLPIPO LAB CRX
Chrome拡張機能の「すべてのサイトのデータを読み取り、変更」とは?
どのページに、いつアクセスできるのか。権限の指定が違う4つの拡張で比べました。
公開日:2026年9月30日 / 検証日:2026年9月30日
結論
全サイトへのアクセス権限は、多くのページの内容を読んだり変更したりする許可です。権限の記載だけでは、実際の送信や悪意を断定できません。
検証概要
- 検証日
- 検証条件
- 自作ファイル・条件・実測結果は本文に掲載
- 再現用ファイル
- 検証ファイルをダウンロード
拡張機能を追加するとき、「すべてのサイト」と表示されると気になります。
多くのサイトで、ページの内容を読み取ったり、書き換えたりする許可を求めています。
これは「できること」の説明です。すでにページを読み取ったり、データを送信したりしたという意味ではありません。
権限だけでは悪意を判定できません。Chromeウェブストアの公式ヘルプも、警告が出るから危険とは限らないと説明しています。今回は拡張の安全性を判定するのではなく、アクセスできる範囲の違いを比べます。
まず、今の拡張に許可している範囲を確認する
- Chromeの右上メニューから「拡張機能」→「拡張機能を管理」を開く。
- 対象の拡張で「詳細」を選ぶ。
- サイトアクセスを確認し、必要に応じて「クリックされた場合のみ」「特定のサイト」「すべてのサイト」から選ぶ。
使わないサイトまで許可しているなら、範囲を狭められるか確認してください。拡張の用途に合う権限かどうかも判断の手がかりになります。
Chrome公式ヘルプによると、表示できる設定は拡張によって異なります。この設定はサイトへのアクセスを制限するもので、VPN・プロキシなど別の仕組みの権限まで一括で止めるものではありません。
4つの拡張で、アクセス範囲を比べる
違いを切り分けるため、ToolPipoで検証用の拡張を4つ作りました。どれもManifest V3・バージョン1.0.0です。まず、権限が書かれた設定ファイルmanifest.jsonを読み比べました。
| 拡張 | ページへのアクセス | 設定ファイルの指定 | 実行のきっかけ |
|---|---|---|---|
| A:サイトアクセスなし | 要求なし | storageのみ | ページに処理を入れない |
| B:一時アクセス | 操作したタブに一時的に許可 | activeTab、scripting | 拡張のアイコンを押す |
| C:特定サイト | 指定したサイト | http://127.0.0.1/* | 対象ページを開く |
| D:広い範囲 | 多くのサイト | <all_urls> | 対象ページを開く |
Bはアイコン操作で処理を入れる作り、C・Dはページを開くと自動で処理を入れる作りです。C・Dの処理内容は同じにし、サイトの指定だけを変えました。バックグラウンドの共通処理に外部通信や保存はありません。
ページを開くと、指定した範囲だけで処理が動いた
拡張がテスト用の文字列を読み取ったら、ページに確認用の印を付けるようにしました。その印が付いたかで、処理が動いたことを確かめています。
Cは指定したホストだけ、Dは試した3条件すべてで印が付きました。
Aと、アイコンを押す前のBには付きませんでした。
| 拡張 | 127.0.0.1 | localhost | 127.0.0.1の別ポート |
|---|---|---|---|
| A:サイトアクセスなし | 付かない | 付かない | 付かない |
| B:アイコン操作前 | 付かない | 付かない | 付かない |
| C:特定サイト | 付いた | 付かない | 付いた |
| D:広い範囲 | 付いた | 付いた | 付いた |
注目したいのはCです。127.0.0.1とlocalhostはどちらも同じPCにつながりますが、サイトの指定では別のホスト名として扱われます。一方、ポート番号だけを変えたページには印が付きました。これは、ポートを省略した指定が全ポートに一致するChromeのURLパターンの仕様に沿った結果です。
Bでは、拡張のアイコンを押した後の動作は検証していません。
表は操作前の結果です。「一時アクセスを許可した後も読めない」という意味ではありません。
検証にはPlaywright付属のChromium 151.0.7922.34を使用し、拡張を1件ずつ読み込みました。読み取り対象はSYNTHETIC_PAGE_VALUE_7419という文字列で、同じ値がHTMLのdata属性に付くことを確認しています。C・Dはローカルホストかつ専用ページでだけ読み取りを行う作りです。実在サイトにはアクセスしていません。
activeTabは、呼び出したタブへの一時的な許可
activeTabは、拡張のアイコンを押すなどの操作で、今のタブへのアクセスを一時的に許可する仕組みです。公式仕様では、別のオリジンへの移動や、タブを閉じると許可が失われます。オリジンとはURLの方式・ホスト名・ポート番号の組み合わせで、この3つが同じページへの移動なら許可は続きます。
<all_urls>はこれとは違い、広いURL範囲を指定します。ただし、chrome://などの制限ページや、追加の許可が必要なローカルファイルまで無条件に読めるわけではありません。なお、activeTab自体はインストール時の権限警告を出しませんが、ほかの権限による警告は出ることがあります。
設定ファイルの権限を詳しく確認する
permissionsには使う機能、host_permissionsにはアクセス先のサイトを指定します。content_scripts.matchesは、ページに自動で処理を入れる対象です。後の2つは、どちらも権限警告に関係する指定です。
ページの文字や要素を読み書きするコードをcontent scriptと呼びます。C・Dはこれを自動で入れる方式です。BはScripting APIを使い、アイコン操作で入れる方式です。このAPIには、scriptingの権限に加え、対象サイトへの許可かactiveTabの一時許可が必要です。
| 権限 | 主な対象 |
|---|---|
storage | 拡張用のデータ保存。Webページ全般を読む権限ではない |
scripting | ページへのコードやCSSの挿入。対象サイトへの許可も必要 |
tabs | タブのURLやタイトルなど。ページ本文の読み取りとは別 |
cookies | Cookieの操作。対象サイトへの権限も必要 |
history | 閲覧履歴の操作 |
clipboardRead | クリップボードの読み取り |
tabsの権限が関係するのは、url・pendingUrl・title・favIconUrlへのアクセスです。タブの作成など、tabs権限なしでも使える操作があります。ほかの権限はChromeの権限一覧、Cookieの条件はCookies APIの仕様で確認できます。今回の4件はcookies・history・clipboardReadを要求していません。
optional_permissions・optional_host_permissionsは、使用時に追加の許可を求めるための指定です。設定ファイルに書かれていても、許可済みとは限りません。今回の4件にはこの指定を入れていません。
検証に使ったZIPをダウンロードする
4件ともToolPipo製の検証用拡張です。Chrome Web Storeで公開されている拡張ではありません。
インストールせず、ZIPを展開してmanifest.jsonを読むだけでも比較できます。各ZIPのREADME.txtに内容を記載しました。外部へデータを送る処理は含みません。
| ZIP | 容量(bytes) | SHA-256先頭16桁 |
|---|---|---|
| A:サイトアクセスなし | 974 | ce31a71ec0ceaf05 |
| B:一時アクセス | 1,849 | 707f1b3683094004 |
| C:特定サイト | 1,685 | dd4643f1cea996b8 |
| D:広い範囲 | 1,665 | c6beb31af82278a3 |
権限の広さと、実際の動作は別
設定した範囲によって、自動で処理が動くページは変わりました。ただし、権限の指定だけを見ても、拡張がどんな処理をしているかまでは分かりません。
許可を求める範囲と、実際に行う処理は別です。
広い範囲を指定したDも、読み取り処理は専用ローカルページに限定しています。Aの結果も、あらゆる方法でページを読めないことの証明ではありません。
実在の拡張の通信先や難読化されたコード、ストアの審査、開発者の信頼性、将来の更新、利用者が追加で許可した権限までは調べていません。インストール時の警告画面も再現していません。検証の扱いはコンテンツ制作・計算検証方針に記載しています。