忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/12/11 22:31 |
JavaScript?2-10:CSSで訪問履歴を取得

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


2009/07/21 19:54 | Comments(0) | TrackBack(0) | JavaScript

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Smarty-05:Smartyの便利関数 | HOME | Smarty-04 Smarty関数>>
忍者ブログ[PR]