GoogleとYahooを訪れたことがある場合、下記リンクの下線が画像で表示されます。
Google
Yahoo
これだけなら単なる装飾ですが、実はこれ、Webビーコンそのものです。
前JavaScriptで訪問履歴が取得できるという話をしましたが、JavaScriptをオフにしていても訪問履歴を取得する手段があったりします。
その手段とはCSSを用いるもので、:visited疑似クラスとbackground-imageプロパティを使用します。
両者ともに元々のCSSの機能であり脆弱性でも何でもありませんが、この二つを組み合わせるだけでこんなことができてしまいます。
index.php
1
2
3
4
5
6
7
8
9
10
11
12
|
<html>
<head>
<style TYPE="text/css"><!--
a#site-google:visited{background:url("site-google.jpg");}
a#site-yahoo:visited{background:url("site-yahoo.jpg");}
--></style>
</head>
<body>
<a href="http://google.co.jp/" id="site-google">Google</a><br />
<a href="http://yahoo.co.jp/" id="site-yahoo">Yahoo</a>
</body>
</html>
|
:visited疑似クラスはそのリンクが訪問済であった場合にだけ有効化される疑似クラスです。
で、その中でbackground-imageプロパティを呼ぶと、リンクが訪問済だった場合に指定したURLにpingが飛ぶというわけです。
上記のリンクは単に画像を呼んでいるだけですが、URLを"hoge.php?site=google"みたいにすれば普通にPHPで受け取ることができます。
逆にjpgの拡張子でPHPが呼び出されるようにしておけばユーザからは画像を呼んでいるようにしか見えません。
あとは引数に適当にIDでも割り振っておけばIPアドレスとの照合も簡単にできてしまいます。
使用しているのはCSSだけなので、ユーザ側で無効化しにくいというのも問題点(利点?)です。
最近はとりあえずCSSが無いとどうしようもないサイトばっかりですのでそうそう無効化するわけにもいきません。
実はこれ、2002年から議論され続けているにもかかわらず未だに解決していない問題だったりします。
https://bugzilla.mozilla.org/show_bug.cgi?id=147777
それだけ根が深くてどうにもならない問題だということなのでしょう。
アイコンはここから拾いました。
http://www.tubumikan.com/
PR
トラックバック
トラックバックURL: