ブラウザ拡張機能の Manifest V3 の問題

投稿日 2021/11/19

はじめに

Manifest V3 で問題となると考えられるものをまとめます。

Manifest V3 の主な変更点

  • バックグラウンドページをサービスワーカーに置き換え
  • Web Request API を Declarative Net Request API に置き換え
  • 拡張機能のパッケージに含まれている JavaScript のみ実行できる
    • それ以外は、実行できない
  • 関数での Promise のサポート
  • その他の比較的マイナーな機能変更

※Manifest V2 との下位互換はありません。
 Manifest V3 対応が必須になります。

参考

ユーザースクリプトが機能しなくなる

Manifest V3 では、次のコードを実行できなくなります。拡張機能によって実行されるコードは、ウェブストアにアップロードされた拡張機能のパッケージに含まれるファイルである必要があります。

  • リモートサーバーから取得した JavaScript ファイル
  • 実行時に eval に渡されるコード文字列

これは、ユーザー自身が作成したコードや Greasy Fork などのサイトで公開されているコードを拡張機能にインストールして実行するユーザースクリプトが動作しなくなることを意味します。

現実的な回避策としては、ユーザースクリプトを個別にウェブストアへ登録することです。これには、ユーザースクリプトの拡張機能がユーザースクリプトのために隠蔽していた、拡張機能用のコードをユーサスクリプトの作者が記述する必要があることを意味します。また、公に公開する場合、ウェブストアの登録料を支払う必要がでてきます。

※何らかの救済措置が取られる可能性もあります。
 ただし、それはまだ発表されていません。

補足(リモートスクリプト実行に関する問題)

リモートスクリプトの実行は何が問題なのでしょうか?

リモートのスクリプトは、事前に確認することができません。拡張機能には、レビューのプロセスがあり、拡張機能の安全性を確認しています。ですが、リモートコードを実行できる場合、このプロセスが意味をなしません。拡張機能は、リモートのスクリプトを使用して己が取得した権限の許す限りの悪さを働くことができます。

参考

コンテンツブロッカーの実現が難しくなる

コンテンツブロッカーは、ユーザーが選択した複数のフィルターリストを購読しています。フィルターリストには、「フィルタリングルール」というルールが大量に記述されています。コンテンツブロッカーは、購読しているフィルターリストのルールをブラウザに事前に登録することでブラウザの通信をブロックしています。

Manifest V3 では、このフィルターリストが1つしかないことを想定しています。また、フィルターリストに登録できるルールの数が30,000件(※1)に制限されています。基本のフィルターとして有名な EasyList のルール数が50,000件以上であることを考慮するると、その制限の少なさが理解できると思います。

現実的な回避策としては、フィルターリストのルール数の制限を考慮した極小のフィルターリストを作成・維持することです。これには、フィルターリスト開発者の多大な努力が必要となります。

※1:批判を受けて、150,000件に拡大されました。

補足(既存の Web Request API の問題)

既存の Web Request API は、何が問題なのでしょうか?

Web Request API を使用するとネットワークリクエストに含まれるすべてのデータを拡張機能で処理(許可・ブロック・変更を加えて送信)されます。この機能は、善意の拡張機能にコンテンツブロッカーとして利用されています。ですが、悪意ある拡張機能もこの機能を利用しています。認証情報や個人情報へのアクセスに用意に悪用できるためです。

これに対して、 Declarative Net Request API は、リクエストの処理(許可・ブロック・変更を加えて送信)を事前にブラウザに登録します。ブラウザは、リクエストに対して事前に登録された処理を実行します。このため、拡張機能はユーザーのすべての個人情報にアクセスすることなく、コンテンツをブロックできるようになります。

参考

上記以外で影響を受けると思われる有名な拡張機能

※その他、影響を受ける拡張機能をご存じの方は、コメント頂ければ幸いです。

Manifest V2 の廃止

Googleは、2023年1月17日に Chrome で Manifest V2 拡張機能をサポートを打ち切ることを言及しています。

Manifest V2 拡張機能が動作しなくなれば、上記の拡張機能が利用できなくなります。また、ウェブストアに登録済みの更新のない Manifest V2 拡張機能もその利用ができなくなります。

Manifest V2 から Manifest V3 対応は、(実現可能な機能であれば)ある程度のスキルと時間があれば十分に実現可能だと考えられます。ですが、ウェブストアにある数多の拡張機能が対応されることなく動作を停止することは、容易に想像できます。

「ブラウザ拡張機能の2023年問題」は、Firefoxがレガシー拡張機能に対応しなくなったとき(Firefox Quantam 58)のような、大きなインパクトがある問題になることが予想されます。

補足

Manifest V2 の廃止は、すべてのブラウザで同時に発生するわけではありません。Edge や Firefox が同様のスケジュールで Manifest V2 のサポートを打ち切ることは発表されていません。ですが、現在のブラウザシェアを考慮すれば Google Chrome 単独でのサポート打ち切りだとしても、その影響は計り知れません。

参考

各ブラウザの今後の対応

ブラウザベータ版 ManifestV3対応リリース版 ManifestV3対応ManifestV2 の打ち切り
Chrome不明Chrome88(2021年01月)2023年01月
Edge2020年10月不明不明
Firefox2021年第4四半期2022年初頭不明

Firefox

問題のある対応を即座に実行しないことを言及し、問題の発生しているアドオン開発者と協力して使用目的等を調査し、対応を決定するとしています。

Vivid

APIの復元や、限定的な拡張機能ストアの作成などと言及しています。

Brave

Web Request API を引き続きサポートすると言及しています。

参考

コメント