Google Chromeでアドオンなしに広告をブロックする技術が見つかる。その技術とは・・・。
Murairoという3Dモデリングソフトを作っている者です。
この前、かの広告ブロッカーとして有名なublock originがGoogle Chromeで使えなくなり、大きなニュースになっています。
ところが、Google Chromeで広告をブロックできる技術やそれを実装したオープンソースのソフトウェアを発見しました。
普通にFirefoxやBraveといった別のウェブブラウザを使った方が良いとは思いますが、Murairoの宣伝も兼ねて「乗るしかないですよね。このビックウェーブに(画像略)」的なノリで書いていこうと思います。
なお、最初に言いますがセキュリティ的に危ない方法であり、また使用したら各サイトからBANされても文句を言えないと思われる手法であるとは述べておきます。
1.そもそもウェブブラウザはどのようにしてウェブページを表示しているのか
まず、ウェブブラウザはどのようにしてウェブページを表示しているか簡単に述べると以下のようになります。
1.まずhttp通信やSSL通信でウェブページの元となるHTML/CSS/Javascriptの情報を持ってくる
2.HTML/CSS/Javascriptをウェブブラウザ上で解釈して画像にする
3.実際に画像をブラウザ上で画面に表示する
さて、ここで勘のいい方なら気づいたと思います。「1の時にもってくるHTMLなどを何らかの形で書き換えてウェブブラウザに渡せばいいんじゃないの?」と?
そして、これは技術的に可能です。具体的な方法としては「PC上(ローカル)にプロキシサーバと言われる代理のサーバーを建てて、それを経由してブラウザ上にhtmlなどを表示」となります。
ただし、結構な工夫が要ります。
2.通常のプロキシサーバではhttps通信の書き換えができない。
まず、通常のプロキシサーバでは大抵のウェブページは書き換えできません。というのも現代のウェブページは基本的にhttps通信が用いられているからです。これは暗号化されているため、通常の方法では書き換えできず、そのまま表示されます。
詳しくはこのqiitaの記事を読むと良いと思います。
しかし、このhttps通信を書き換える手法があります。
3.https通信の書き換えを可能とするMITMプロキシ
このhttps通信を無理矢理書き換える手法としてMITMプロキシがあります。MITMとはMan in the middleの略で日本語に訳すと中間者攻撃となります。その名前の通りハッキングの技術の一つと言える物です。仕組みを簡潔に述べると以下のようになります。
1.クライアントがサーバーに接続すると代わりにMITMプロキシがリクエストを受ける
2.MITMプロキシがクライアントになりすましてサーバーと通信を確立(なお、このためにはSSL/TLS証明書が必要)
3.クライアントとの間でMITMプロキシがサーバーのふりをして通信する
4.双方の通信内容を中継しながら、HTMLの書き換えを行う
このMITMプロキシの技術を用いたソフトウェアは検索すると幾つかあり、オープンソースとして公開されています。
MITM Proxy
Pi-hole
Zennでもいくつか取り上げている記事があるので読むと良いと思います。
なお、このMITMの技術による書き換えを防ぐためにSSLピンニングやHSTS(HTTP Strict Transport Security)という技術も開発されていますが、ブラウザの設定でHSTSを無効化するなど、これらの対処法を突破して書き換えられる技術も開発されています。
4.ただし、セキュリティ的に危険
一つ注意すべきはこの手法はセキュリティ的に危険だということです。絶対やってはいけないと言わないまでも、注意深く扱わないといけません。
というのも、本来は暗号化されるべきhttps通信が解除されるからです。マルウェアなどが侵入した場合、通常の場合よりも圧倒的に情報が盗まれやすくなります。
なので、やる際は自己責任で気をつけてやった方がいいです。
5.余談。これを使うとX(旧ツイッター)を悪用し放題?
余談ですが、これを使えばブラウザで表示される内容やサーバーとの通信を書き換えし放題になるということで、これを使うとツイッターを悪用し放題でしょう。
おそらくBlueskyやMisskeyとツイッターの同時投稿も可能でしょうし、悪名高いトレンドやインプレッションも防ぐことができると思います。
もちろん技術的には可能でも上で述べたようにセキュリティ的に危険ですし、何より利用規約に引っかかりますので、ツイッターの運営にバレたら永久BANされるでしょう。なのでやるとすれば自己責任でお願いします。
少なくとも私はそんなことをする気は起きません。
Discussion