k41531

CAPTCHAを使ってユーザの閲覧履歴を取得する

Hacker Newsで見つけた面白い投稿の紹介。
[Retrieving your browsing history through a CAPTCHA](https://news.ycombinator.com/item?id=30569396

元の記事にアクセスすると、最初にCAPTCHAのようなものが表示されます。これを解くとユーザーがアクセスしたサイトを特定できるといったものです。
特定にはCSSの擬似クラスが使われています。 Webサイトを閲覧している際、さまざまなページと飛ぶと思いますが、訪れたことのあるサイトとそうでないサイトで色が異なっていることがよくあります。これはCSSの擬似クラスである:visitedを使っていることによるものです。
:visitedを使って訪れた人だけが見えるリンクを作ったり(もしくはその逆)することにより、ユーザがどのようなサイトに訪れているのかを収集することができてしまいます。

ブラウザベンダーもこれについて考慮している様で、Mozillaのドキュメントでは「ちょっとした善意の嘘」という題で、訪問済みのサイトでも未訪問として表示される場合が稀にあると書かれています。

私自身、このような発想が無かったので面白い記事だと思ったのですが、驚くべきことはこの記事の著者がたった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スタイルを使用してかつセキュリティ違反にならない様にするためには、ドメインがそのドメインにローカルなリンクにのみこのスタイルを適用し、他のドメインでは適用しない様にすることです。