😈

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

2022/09/20に公開

以前自分のブログに投稿した記事の供養です。(少し内容が古いです。)

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

Hacker Newsで見つけた面白い投稿の紹介。
https://news.ycombinator.com/item?id=30569396
元ネタの記事。
https://varun.ch/history

元の記事にアクセスすると、最初に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