私はChrome拡張機能を運営しています。そのマニフェストはidentity権限、自分のSupabaseバックエンドに限定したホスト権限、そして——このどちらよりも重要なことに——訪れるすべてのhttp://およびhttps://ページで動作するコンテンツスクリプトをリクエストします。実際にChromeの最も広範な「アクセスしたサイトのすべてのデータの読み取りと変更」という警告を引き起こしているのは、このコンテンツスクリプトであって、バックエンドのホスト権限ではありません。これらすべてが何のためにあるかについては、このサイトの別記事で全体を詳しく説明しています。ここで改めて、しかも冒頭で名指ししているのは、「拡張機能はセールストークではなくマニフェストで判断する」という主張全体を持つ記事が、まず自分自身の著者に向けられても成立して初めて、その主張をする権利を得るからです。
それを踏まえた上で、実際にマニフェストをどう読むか、そして人々が毎日インストールしている8本の拡張機能にこの方法を当てはめると何が見えてくるか、そして自分の拡張機能がどこに位置するかについての自己批判的な考察をお届けします。
自分でどんな拡張機能のマニフェストも読む方法
Chrome ウェブストアのインストールプロンプトは要約にすぎません。マニフェストが原典です。両者を比較する前に知っておくべきことがいくつかあります。
- 権限、ホスト権限、コンテンツスクリプトは、それぞれ独立して同じ広範な警告を引き起こしうる3つの別々の宣言です。 ある拡張機能は
permissions配列だけを見ると狭く見えても、広いmatchesを持つcontent_scriptsブロックや、<all_urls>のhost_permissionsエントリのせいで、実はすべてのページで動作していることがあります。インストールプロンプトがたまたま最初に要約するものだけでなく、3つすべてを読んでください。 - 宣言された権限は上限であり、実際に使われている保証ではありません。 マニフェスト上は広いアクセスを宣言していても、より狭いデフォルトの動作を出荷し、その機能が必要とする場合に明示的にオプトインしたときだけフルスコープを行使する拡張機能もあります。これは思い込みで済ませず確認する価値のある実際の区別です。そして逆方向にも成り立ちます——紙の上では狭く見えるマニフェストでも、持っているアクセスを使って知っておくべき何かをしていることもあります。
optional_permissionsとoptional_host_permissionsは、インストール時に同じアクセスを要求するのとは意味的に異なる主張です。 特定の機能をクリックした瞬間にだけChromeが求める権限は、すべてのインストールに束ねられている同じ権限よりも、たとえ発動後に得られるAPIアクセスが同一だったとしても、より小さく、より説明責任のある要求です。- Manifest V3は、リスクのカテゴリを丸ごと1つ、構造的に閉じています。 拡張機能はもはや実行時にリモートサーバーから任意のJavaScriptを取得して実行することができません。これはもはや控えめな推奨ではありません。Chromeは2025年にManifest V2拡張機能の実行を停止しており、Googleは2026年8月31日をもって、残っているMV2拡張機能をChrome ウェブストアから完全に削除します。V3へ移行していない拡張機能は、もはや「一応確認しておくべきもの」ではなく、すでに動作しないか、まもなく消えるもののどちらかです。
- オープンソースなら、要約ではなく実際のリポジトリ内のmanifest.jsonを読んでください。この記事の要約も含めてです。 クローズドソースなら、Chrome ウェブストア掲載ページ自体の権限開示が、入手できる中で最も信頼できる公開情報です。ソースコードほど詳細ではありませんが、それでもその上にある機能説明よりは正確です。
- 端末から何が、どんな条件で出ていくのかを名指ししたプライバシーポリシーは、「サービス向上のために情報を収集することがあります」と書かれたものより価値があります。 曖昧なポリシーは、拡張機能自体がどれだけ優れていても定型文にすぎません。
- これは一度きりのチェックではありません。 拡張機能の所有権は、あなたがすでにインストールしたあとで譲渡されることがあり、新しい所有者は同じ名前と同じインストール基盤のまま、新しい機能を持つアップデートを配信することがあります。それがどう見えるかは、この記事の後半で扱います。
実際の拡張機能8本に当てはめるとどうなるか
以下それぞれについて、オープンソースであればプロジェクト自身のGitHubリポジトリから、そうでなければChrome ウェブストア自体の権限開示から、実際のマニフェストを取得しました。
| 拡張機能 | 権限/ホストアクセス | 広範なアクセス? | 妥当か? |
|---|---|---|---|
| uBlock Origin Lite | activeTab, alarms, declarativeNetRequest, offscreen, scripting, storage, unlimitedStorage, userScripts;host_permissions: <all_urls> | 宣言上は広範、デフォルトは狭い | 妥当、かつデフォルトではほぼ未使用。<all_urls>はオプションの「最適」および「完全」フィルタリングモードの上限であり、デフォルトの「基本」モードはdeclarativeNetRequestの静的ルールセットだけでブロックし、サイトごとに自分でモードを上げない限りページのコンテンツを読み取ることはない |
| Bitwarden | activeTab, alarms, clipboardRead, clipboardWrite, contextMenus, idle, offscreen, scripting, sidePanel, storage, tabs, unlimitedStorage, webNavigation, webRequest, webRequestAuthProvider, notifications;host_permissions: https://*/*, http://*/* | はい | 妥当。自動入力は、今いるページのフォームフィールドを読み取らないと機能せず、それはどんなページにもなりうる |
| ClearURLs | <all_urls>, webRequest, webRequestBlocking, tabs, downloads, contextMenus, webNavigation, storage, unlimitedStorage(依然Manifest V2) | 紙の上では、はい | これは「毎日みんながインストールしている」例ではなく、警告事例です。URL書き換えは、まだ動作していれば広いアクセスを正当化できたはずです——このMV2拡張機能のメンテナーはV3への移行リクエストを明確に「予定なし」としてクローズしており、Chromeはすでにこれの実行を停止しており、Googleはこの記事の公開10日後にあたる2026年8月31日に、残っているMV2拡張機能をウェブストアから削除します |
| Privacy Badger(EFF) | alarms, declarativeNetRequest, privacy, scripting, storage, tabs, webNavigation, webRequest;host_permissions: <all_urls> | はい | 妥当。サードパーティのトラッカーを、無関係なサイトを横断してどのドメインが現れるかを見て検出するのが、その仕組みそのものであり副作用ではない(読者として知っておく価値がある点:EFF自身のGitHubソースファイルはビルドされていないMV2テンプレートであり、実際に公開されているものではない。上の行は、リポジトリではなく実際に公開されているChrome ウェブストアのバイナリから取得した、実際に出荷されているManifest V3の権限) |
| Dark Reader | alarms, fontSettings, scripting, storage;host_permissions: *://*/* | はい | 妥当。ページのCSSを反転または暗くするために書き換えるのに、一部のページだけで動くバージョンは存在しない |
| GoFullPage | activeTab, scripting, storage, unlimitedStorage;optional_host_permissions: <all_urls>, file://*/* | 宣言上は広範、オプトイン | 仕事に見合っている。インストール時の付与は狭く、activeTabは実際にキャプチャをトリガーしたタブにしか触れない。マニフェストにはより広いアクセスが存在するが、optional_host_permissionsの背後にあり、特定のキャプチャシナリオ(iframeを含むページなど)が実際に必要とした場合にのみ、インストール時ではなくChromeが付与する |
| Vimium | tabs, bookmarks, history, storage, sessions, notifications, scripting, favicon, webNavigation, search;host_permissions: <all_urls> | はい | 妥当。すべてのページのキーボード主導のナビゲーションはどこでも動作する必要があり、ブックマーク/履歴へのアクセスは、ブックマークや過去のページへジャンプする独自のキーボードコマンドを支えるためのもので、後付けの別機能ではない |
| OneTab | tabs, activeTab, scripting, storage, unlimitedStorage, contextMenus, favicon(クローズドソース。主要なGitHubソースではなく、実際に公開されているChrome ウェブストアのマニフェストに基づく) | 広範なホストアクセスはないが、無視できるものでもない | 仕事に見合っているが、実際に読む価値のある権限が1つある。tabsは、操作しているタブだけでなく、開いているすべてのタブのURLとタイトルを取得できる。これはまさにこの手法が、機能説明だけを見て思い込むのではなく、明るみに出すために存在するようなものだ |
| Second Bookmark Bar(自分の拡張機能) | activeTab, bookmarks, storage, favicon, identity, alarms;オプションのtabGroups(インストール時ではなく実行時にのみリクエスト);1つのSupabaseドメインに限定したホスト権限;document_startでhttp://*/*とhttps://*/*に対するコンテンツスクリプト | はい | おおむね妥当だが、コンテンツスクリプトのスコープは本物の広さがある。それはバーを描画し、ドラッグされた要素の詳細を読み取るためのものであり、その上のbookmarks/storage/activeTab権限より確かに広い。それが、この拡張機能がこの表の最上位にランクされない正直な理由だ |
<all_urls>、バンドルされた広告またはアナリティクスSDK、コピペのプライバシーポリシーを持つ架空の無料拡張機能 | <all_urls>とサードパーティSDKドメインへの送信 | はい | いいえ、意図的に。これは特定の製品ではなく、注意すべき「形」だ。明らかにそれを必要とする機能がないのに広いアクセスを持ち、説明文には一切触れられていないネットワーク呼び出しでマネタイズし、開示というより定型文のように読めるポリシーで裏付けられている |
この表から埋もれさせず取り出しておく価値があることがいくつかあります。OneTabとGoFullPageは、この中で最もホストアクセスが少なく、どちらも自由にアクセスできるサイトを1つも要求していません。それは偶然ではありません。タブ一覧ツールとスクリーンショットツールは、実際に操作した以上のページコンテンツを見る必要が本質的になく、だから要求しないのです。しかし「アクセスが最も少ない」は「読む価値のある権限が何もない」とは違います。OneTabは依然としてtabsを宣言しており、これはクリックした1つのタブだけでなく、今開いているすべてのタブのURLとタイトルを渡してしまいます。これは、他のどれよりも狭く見えるツールについて知っておくべき、本物の具体的な事実です。(タブの溜め込みが実際に解決したい問題なら、OneTabとSecond Bookmark Barの比較も、どちらのアプローチにするか決める助けになるよう書いてあります。)Bitwarden、Privacy Badger、Dark Reader、Vimiumはいずれもインストール時から広く、いずれも妥当です。それぞれが行うことが構造的にすべてのページを見る必要があるからです——自動入力、サイト横断のトラッカー検出、CSSの書き換え、そしてユニバーサルなキーボードキャプチャは、Webの一部でしか動かないバージョンを持ちません。ClearURLsはマニフェストの理由だけで見れば同じグループに属するはずです(URL書き換えはすべてのURLを見る必要がある)が、その根拠がほぼ理論上のものになっていることも知っておく価値があります。Manifest V2から一度も移行しておらず、Chromeは2025年にMV2拡張機能の実行を停止しています。
uBlock Origin Liteは最も興味深いケースであり、私が最初の読みで間違えた例でもあります。そのマニフェストは確かに<all_urls>を、一切の留保なく宣言しています。しかし、その宣言はほとんどのユーザーが決してオンにしないオプションモードの上限です。デフォルトで有効になっているモード「基本」は、declarativeNetRequestの事前コンパイル済みルールセットだけでブロックし、特定のサイトで明示的にフィルタリングレベルを上げない限り、実際にページの内容を読み取ることはありません。教訓は「uBlock Origin Liteの権限はゼロだ」ではありません——それは誤りです。そうではなく、マニフェストが教えてくれるのは拡張機能ができる最大値であり、それが日々実際に意味を持つかどうかを知るには、デフォルトで実際に何をしているかを別途確認しなければならない、ということです。
そして、自分の番です。Second Bookmark Barはこの表のトップには立たず、そうあるべきでもありません。すべてのページで動作するコンテンツスクリプトは、正真正銘の広範なアクセスであり、「ドラッグしたときだけ要素を読み取る」というのは、マニフェストが宣言している内容を何も変えません。それは、この表の他のすべての行に適用しているのと同じ基準であり、自分の行にも適用しなければ、この記事全体が権限監査の衣をまとったマーケティングになってしまいます。そのコンテンツスクリプトが持っているアクセスで実際に何をし、何をしないかについての詳細な、事例ごとの説明が必要なら、こちらが安全性についての全体記事です。会社を代表して評価している場合には、同じ開示のセキュリティレビュアー向けバージョンもあります。
権限確認は一度きりのチェックではない
2026年2月、QuickLensという「Google Lens」風の画面検索ツールで、インストール数約7,000のChrome拡張機能が所有者を変更しました。発表からほどなくサードパーティの拡張機能マーケットプレイスに売りに出されており、2月1日までには、別の名前で運営する新しい所有者のもと、研究者たちが「ほとんど機能していない」と評したドメインでホストされたプライバシーポリシーに差し替えられていました。2月17日、新バージョンが配信され、MetaMask、Phantom、Coinbase Walletを含む複数のインストール済み暗号資産ウォレットを検出し、それらを空にするために必要な認証情報を収集しようとするコードが追加されました。複数のセキュリティ研究者やメディアが、これを噂ではなく、実際に確認されたサプライチェーン事件として報じています。
そのストーリーには、ほとんどのユーザーが気づくようなマニフェストの変更は一切必要ありませんでした。拡張機能のインストール基盤も、名前も、掲載情報も同じままでした。変わったのは、誰がそれを支配していたか、そしてその新しい所有者が何を配信することにしたかです。それが上のすべての正直な限界です。マニフェストを読むことは、現在それを支配している人々が、今この瞬間に何ができるかを教えてくれます。1年後に誰がそれを支配し、何を追加することにするかは教えてくれません。インストール時に一度権限を確認するのは合理的な習慣です。そのチェックを永続的なものとして扱うのは、そうではありません。
会社のChromeが拡張機能をブロックしている場合
この監査のすべては、インストールプロンプトを目にする前に、雇用主のChromeポリシーが拡張機能を完全にブロックしてしまっている場合には関係ありません。これは、実際に危険なマニフェストであるケースよりもはるかによくある、別の状況です。あの灰色の「組織によりブロックされています」ダイアログに遭遇したことがあるなら、それが実際に何なのか、インストール申請の流れがどう動くのか——IT管理者が承認を求められたときに実際に何を見るかも含めて——まとめてあります。逆に、自分だけでなくチームのために拡張機能を承認するかどうか判断する立場にあるなら、そのレビュアーのために書かれた権限ごとのレビューが、その判断のために作られたページです。