先日、GoogleのDiscoverで見かけたこの記事。
こちらのサイトは「http://tanweb.net」というURLで運営されているのに、「https://tanweb.net」でアクセスすると全く無関係なサイトに繋がってしまい、その関係でGoogle AdSenseの広告配信が止められてしまった、という話。
記事でも書かれていますが、最初の感想は「いやいや、そんなことありえないでしょ」と。同じドメインを使っていながら全く別サイトに繋がってしまうなんてことが起こるようであれば、Webの大前提が崩壊してしまいます(とはいえDNS関係の攻撃で偽サイトへ誘導するなどはありえるので、何事も手放しに信用してはいけない)。
じゃあ今回起きた事例はなんなのか。考えたときに、一つの可能性が思い浮かびました。
そう、自分でも似たようなことを経験していました。
上にも書いたDNS(Domain Name System)とは、人間が覚えやすくするために決められたドメイン名を、サーバの本来の「住所」であるIPアドレスに変換する仕組み(ざっくり説明)。その仕組みに、通信する内容は関係してきません。しかし、それでは一つのWebサーバで複数のサイトを運営する場合に困ってしまいます。
そこでApacheなどのWebサーバでは「名前ベースのバーチャルホスト」という機能があります。これはHTTP(S)でのアクセスの際に、リクエストヘッダーに要求先のホスト名が含まれていることを利用して、そのホスト名をキーにして送出するコンテンツ(Webサイト)を区別します。
例えば、192.168.1.1というIPアドレスに対し、site1.example.comとsite2.example.comという2つのドメインが紐付いている場合、
PC「DNSさん、site1.example.comのIPアドレスを教えてください」
DNS「site1.example.comは192.168.1.1ですよ」
PC「192.168.1.1さん、site1.example.comの中身をください」
Webサーバ(192.168.1.1)「site1.example.comはこれですよ」
PC「DNSさん、site2.example.comのIPアドレスを教えてください」
DNS「site2.example.comは192.168.1.1ですよ」
PC「192.168.1.1さん、site2.example.comの中身をください」
Webサーバ(192.168.1.1)「site2.example.comはこれですよ」
という感じです。
このとき、Webサーバ側ではsite1.example.com、site2.example.comについてすでに設定されています。ではその時、想定外のsite3.example.comへのアクセスが来たらどうなるでしょうか。
PC「DNSさん、site3.example.comのIPアドレスを教えてください」
DNS「site3.example.comは192.168.1.1ですよ」
PC「192.168.1.1さん、site3.example.comの中身をください」
Webサーバ(192.168.1.1)「(うーん、site3っていうのは知らないな、とりあえずsite1の中身を送っておくか!)site3.example.comはこれですよ(本当はsite1だけど!)」
そう、知らないドメイン名でのアクセスがあった場合に、設定によっては無関係のサイトのコンテンツを送信してしまう場合があるのです。
あれ、これって冒頭で挙げた事例と同じ…?
今回の事例の場合、調べてみたところ、http(SSLなし)でのアクセスであればサーバ業者デフォルトのエラーページに飛ばされるのですが、https(SSLあり)で未設定のドメインでアクセスされた場合にとある契約者のスペースに飛ばされてしまうようでした。
つまりブログ主さんの落ち度や責任は一切なく、サーバ業者側の設定ミス、と結論づけました。
ちなみにその業者へはすでに連絡を済ませ、対応を進めるという旨、記事化についても問題ないという確認を得た上で記事にしています。
いやー、こんなこともあるんですねえ。業者側も一度問い合わせた際にそんなはずはない、みたいな返答になっていたみたいですが、カスタマーサポートの窓口の人も想定外だったのかもしれません。自分は個人的に経験があったので気が付きましたが、うっかりしているとやってしまうミスなのかもしれません(いや、お金取ってるんだからしっかりしてよ、とは思いますけどね…)。
ということで、さようならー。
コメント