
UNIX Cafe 第107回
ログに眠る「ブラウザ戦争」の化石:なぜ彼らは偽名を使い続けるのか?
Webサーバーのログを眺めていると、必ず出くわす「謎の文書」があります。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36
WindowsでChromeを使っているだけなのに、なぜ「Mozilla」や「AppleWebKit」、挙句の果てには「Safari」まで名乗っているのか? 実はこれ、Webの黎明期から続く「嘘と偽装の歴史」が積み重なった結果なのです。
1. 始まりの嘘:「私はMozilla(Netscape)です」
1990年代、世界を制していたのは Netscape Navigator でした。コードネームは「Mozilla」。 当時、Netscapeは最新機能である「フレーム分割」をいち早く導入しました。Webサイト側はこう考えます。 「Mozilla(Netscape)なら最新ページを、それ以外なら古い簡易ページを表示しよう」
これに困ったのが、後発の Internet Explorer(IE) です。IEは最新機能に対応しているのに、名乗らなければ「古いページ」に飛ばされてしまいます。 そこでIEのエンジニアが取った作戦が「私はMozilla互換(Compatible)のIEです」と名乗ること。これが「偽装」の始まりでした。
2. Linux陣営の挑戦:KHTMLの誕生
その後、Linuxの世界で Konqueror というブラウザが登場します。彼らは独自の「KHTML」という優れたエンジンを持っていました。 しかし、世の中のサイトは「Mozilla」か「IE」しか見てくれません。 そこで彼らはこう名乗りました。 「私はMozilla(のフリをした)、KHTML(を積んだブラウザ)だ。Gecko(Firefoxのエンジン)に似ている(like Gecko)から、ちゃんと表示してくれよ!」 ログにある (KHTML, like Gecko) という奇妙な一節は、彼らの必死の呼びかけなのです。
3. Appleの参入とChromeの「全部乗せ」
AppleがSafariを作る際、このKHTMLをベースに AppleWebKit を開発しました。 さらにGoogleがChromeを作る際、AppleWebKitをベースにしました。
この時、Chromeは考えました。「全てのサイトで完璧に表示されたい」。 その結果、過去のしがらみを全て飲み込んだ、あの「全部乗せ」の文字列が完成したのです。
| 含まれる名前 | 実際の意味・歴史的背景 |
| Mozilla/5.0 | 「私は現代的なブラウザです」というパスポート代わり |
| AppleWebKit | Safariと同じエンジン、あるいはその互換であることを証明 |
| KHTML | Linux時代の先祖への敬意と、古いサイトへの配慮 |
| like Gecko | 「Firefox(Gecko)向けのページでも動くよ」というアピール |
| Safari | 「Safariができることは全部できるから安心して」という宣言 |
ユーザーエージェントは「化石の地層」である
現代のユーザーエージェントは、もはや「誰であるか」を示すものではなく、「これまでのブラウザたちが戦ってきた歴史の地層」です。
セキュリティの観点から見れば、この「嘘」を逆手に取って、攻撃者は身元を隠します。しかし、私たちは、この文字列が語る「歴史」を知ることで、アクセスしてきた相手がクローラーなのか、本物の人間なのかを見極める一助にできるのです。
ログの「嘘」を暴く:クローラーと人間を分かつ3つの境界線
ユーザーエージェント(UA)は自己申告制です。誰でも「私はChromeです」と名乗れてしまいます。 しかし、本物の人間と、正体を隠したボットの間には、隠しきれない「挙動のズレ」が生じます。
1. 「正直者」と「潜伏者」の自己紹介
まず、ログをUAでフィルタリングしたとき、大きく2つのグループに分かれます。
正直なクローラー(Good Bot)
Googlebotや、今回ログに出現したBarkrowlerなどがこれです。彼らはUAの中に「自分の名前」と「詳細情報のURL」を堂々と記述します。
Mozilla/5.0 ... (compatible; Barkrowler/0.9; +https://babbar.tech/crawler)
潜伏するボット(Scraper/Bad Bot)
サイトの情報を盗み見たり、脆弱性を探したりするボットは、正体を隠すために「ごく普通のWindows Chrome」などのUAを丸ごとコピー(偽装)してやってきます。
2. IPアドレスという「動かぬ証拠」
UAが「嘘」を吐いていても、接続元であるIPアドレスは嘘をつけません。ここがセキュリティ屋の腕の見せ所です。
逆引き(PTRレコード)の確認
Googlebotを名乗るIPなら、逆引きすれば必ず googlebot.com で終わるドメインが出てきます。もしUAがGooglebotなのに、逆引きして「謎のレンタルサーバー」や「海外のデータセンター」が出てきたら、それは100%偽物です。
AS番号(ネットワークの出所)のチェック
普通の人間なら「楽天モバイル」や「ぷらら」といった日本のプロバイダ(ISP)からアクセスします。 一方、偽装ボットは「AWS(Amazon)」や「DigitalOcean」といったクラウドサーバーから攻撃を仕掛けてきます。「一般ユーザーがサーバーの中からブラウザを操作してサイトを見る」ことはまずありません。
3. リクエストの「呼吸」を読む(行動解析)
UAが同じでも、人間とボットでは「サイトの歩き方」が決定的に違います。
| 項目 | 本物の人間(ブラウザ) | 偽装ボット(プログラム) |
| 静的ファイルの読み込み | HTMLの後に画像、CSS、JSをセットで読み込む | HTML(中身のテキスト)だけを高速で抜いていく |
| リクエストの間隔 | ページを読んでから次へ行く(数秒〜数分の間隔) | 0.1秒単位の超高速、または機械的な一定間隔 |
| リンクの辿り方 | 興味のある場所をクリックする | サイト内のリンクを全方位に、あるいはタグを順番に巡回する |
| リファラ(参照元) | Google検索やSNS、サイト内リンクから来る | リファラが「空」か、不自然にトップページ固定 |
結びに:ログの向こう側に「体温」を探して
私たちが日々目にするユーザーエージェントの文字列は、一見すると無機質で、矛盾に満ちた「嘘つきの告白」のようです。しかし、そのカオスな地層を一枚ずつ剥いでいくと、そこにはWebの自由を守ろうとした先人たちの知恵と、熾烈なシェア争いの歴史が刻まれています。
セキュリティの現場でログを解析するということは、単に不正アクセスを弾くことではありません。
- 名前(UA) で相手の自称を聞き
- 出所(IP) で相手の背景を裏付け
- 呼吸(行動) で相手が「本物の人間」かどうかを感じ取る
この三段構えの視点を持つことで、ただの文字列だったログが、生き生きとした「訪問者の足跡」に見えてくるはずです。
「WindowsのChromeを使っている」という平凡な記録も、歴史を知れば一つのドラマになります。もし、あなたのサイトのログに奇妙なリダイレクトや、見慣れない「AppleWebKit」の文字を見つけたら、それはデジタルの迷宮からの招待状かもしれません。
次にログを開くとき、あなたにはその文字列の裏側にいる「誰か」の体温が、少しだけ感じられるようになっているかもしれませんね。
さらに学びたいあなたへ
📘 用途ごとに選ぶ Linux のおすすめ本

