CAPTCHAを使ってユーザの閲覧履歴を取得する
以前自分のブログに投稿した記事の供養です。(少し内容が古いです。)
CAPTCHAを使ってユーザの閲覧履歴を取得する
Hacker Newsで見つけた面白い投稿の紹介。
元ネタの記事。元の記事にアクセスすると、最初にCAPTCHAのようなものが表示されます。これを解くとユーザーがアクセスしたサイトを特定できるといったものです。
特定にはCSSの擬似クラスが使われています。 Webサイトを閲覧している際、さまざまなページと飛ぶと思いますが、訪れたことのあるサイトとそうでないサイトで色が異なっていることがよくあります。これはCSSの擬似クラスである:visited
を使っていることによるものです。
:visited
を使って訪れた人だけが見えるリンクを作ったり(もしくはその逆)することにより、ユーザがどのようなサイトに訪れているのかを収集することができてしまいます。
ブラウザベンダーもこれについて考慮している様で、Mozillaのドキュメントでは「ちょっとした善意の嘘」という題で、訪問済みのサイトでも未訪問として表示される場合が稀にあると書かれています。
ちなみに、この:visited
などの悪用方法は古くから知られているようです。
私自身、このような発想が無かったので面白い記事だと思ったのですが、驚くべきことはこの記事の著者がたった15歳ということです。HackerNewsのコメント欄にもありますが、CAPTCHAを使った概念実証も非常に分かりやすく面白いです。
コメント紹介
I rarely see websites that actually make use of
:visited
style as intended
実際に :visited
スタイルを意図したとおりに使用しているウェブサイトはほとんど見かけません。
For Firefox at least, toggling layout.css.visited_links_enabled should fix this.
少なくともFirefoxでは、layout.css.visited_links_enabledを切り替えると解決するはずです。
The answer to having both visited styles and not security violations is to allow a domain to only style links that are local to that domain and not others.
:visited
スタイルを使用してかつセキュリティ違反にならない様にするためには、ドメインがそのドメインにローカルなリンクにのみこのスタイルを適用し、他のドメインでは適用しない様にすることです。
Discussion