Webビーコン:Tracking Cookieをブラウザに送る

参考:Cookie---状態管理とトラッキング

貴方にユニークIDを与えて行動を補足することを考えてみましょう。 ユニークIDを持つ貴方はパソコンを移動して別のネットワークから接続しても(IPアドレスが違ったとしても)で識別されることになります。

これから紹介する例は、画像表示時する<img>タグを使って次のように

<img src="flower.cgi" alt="flower.gif" />
と書き込んで、あたかも花のGIF画像を表示されるように見せかけてみる。 このファイル flower.cgi が CGI Perlスクリプトであり、貴方にユニークIDを与えてクッキーをブラウザに送り込む。 WebサーバはユニークIDを与えた貴方のCookie情報を元にして、Web上の行動を知ることができることになる。 併せて、ブラウザにCookieがドメイン名 isc.meiji.ac.jp で残っているかを確かめてほしい。

スクリプト flower.cgi

flower.cgi は文字コード UTF-8 改行 LF で次のように書かれており、実行属性を与えてて Webサーバ isc.meiji.ac.jp に置いてある。

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use Digest::MD5 qw(md5_hex);

# Configuration.
my $log_file = './tracking.txt';# トラッキングログを保存するファイル名
my $gif_file = '.tracker.gif';#表示するGIF画像(透明)
my $expires = '+30d';#30日の有効期間
my $cookie_name = 'tracking';#Cookie名

my $cgi = new CGI;

# ユニークIDの取得
my $unique_id = $cgi->cookie($cookie_name);
if (not $unique_id) {
    # Not found. Create new unique_id.
    $unique_id = md5_hex(localtime() . $$);
}

# value値にユニークIDを含むクッキー
my $cookie = $cgi->cookie(
    -name => $cookie_name,
    -value => $unique_id,
    -domain => 'isc.meiji.ac.jp',
    -expires => $expires,
);

# HTTP応答ヘッダ
print "Content-type: image/gif\n";
print "Set-Cookie: $cookie\n";
print "\n";

# HTTP応答ボディ
binmode(STDOUT);# 標準出力をバイナリにする
open(GIF, $gif_file);# 画像ファイルを開く
binmode(GIF);# 画像ファイルはGIF
print <GIF>;# 標準出力に書き出す
close(GIF);# ファイルのクローズ

# ブラウザ情報
my $http_referer = $ENV{HTTP_REFERER} || '';# リファラ(リンク元のページ)
my $remote_addr = $ENV{REMOTE_ADDR} || '';# IPアドレス
my $localtime = scalar localtime();# 現在時刻

# ログに書き足す
open(FILE, ">> $log_file");
print FILE "$unique_id,";
print FILE "$localtime,";
print FILE "$remote_addr,";
print FILE "$http_referer\n";
close(FILE);
__END__

単純にCookieをクライアントにセットだけのスクリプトで、セーバの応答ヘッダで次のように Set-Cookie したのと同じである。

Set-Cookie: customer=umeko; domain=isc.meiji.ac.jp; path=/;

ここでのCookie寿命は30の日有効期限を持つ。 以下のページアクセスして、クッキーが保存されていることを確認しよう。

演習

Tracking Cookiのあるページ

上のCGIスクリプトを使って 実際にクッキーを現在使っているブラウザに送り込んでみよう。 以下のページでは貴方にユニークIDを与えて行動(ページ内のどのリンクをクリックしたか)を補足します。

Tracking Cookieをテストするにアクセスしてみよう。

パソコンを移動して別のネットワークから接続しても(IPアドレスが違ったとしても)ユニークIDを持つ貴方であることはわかる。 つまり、この仕組みを使えば、(自分の)Webサイトにアクセスしているユーザログ(しかも、IPアドレスが変わったとしても、Cookieの有効期限内であればユニークIDとして)を取ることができ、各IDを持つ人のページ(あるいはページ群内のクリック状況を補足できるこのに注意しよう。

各ページ毎の自分のユニークIDを推察してみよ。 ただし、Cookieはブラウザごとに発行されることに注意する(ブラウザを換えれば、同じページのユニークIDは異なる)。

Webビーコン

このようなHTMLの特性、<img>タグ内容を読み込もうとする性質を使う追跡方法をWebビーコン(あるいはWeb bug)という。 複数Webサイトのアクセス解析に広く使われている。 相手先のコンピュータ(や携帯)がネットワークに繋がっていて、<img>タグをが使えるような状況であれば可能である(この例のように、透明なGIF画像 1 x 1 ピクセルが多く使われている、としておけば、相手は気がつきもしない)。

つまり、Webビーコン(Webバグ)が使われる代表的例には次がある。