» Mozilla Hacks ブログ翻訳

CSS の :visited に行われるプライバシー対策

訳注 (2013-01-28): 現在 :visited の対策は他のブラウザでも行われており、Firefox に限ったことではありません。対応状況については MDN の :visited の項をご覧ください。

原文: privacy-related changes coming to CSS :visited (Christopher Blizzard 著)

本件の詳細については David Baron の投稿該当するバグMozilla Security Blogの投稿 をお読みください。

訳注: Mozilla Security Blogの投稿は「CSS によるブラウザ履歴の漏えいを防ぐ取り組み」に日本語訳が公開されています。

長年にわたり、CSS の :visited セレクタ はユーザの履歴を取得する経路となっていました。このセレクタ自体は特に危険ではありませんが、JavaScript の getComputedStyle() とともに使われることで、ユーザの履歴を詮索しどのサイトに訪れていたのかを知ることができるのです。そして、これらはとても素早く行われます。テストでは、1分間で 210,000 もの URL を確認できた という結果が出ています。この割合でいけば、ユーザの履歴にブルートフォースを行う(訳注: 総当たり検索でユーザの訪問済みサイトリストを取得する)ことや、最低限でも フィンガープリンティングによるユーザの識別 を行えてしまいます。ブラウザが履歴を長期間保存することもあり、ユーザの Web 上の行動をかなり把握されてしまうおそれがあります。

私たち Mozilla は人々のプライバシーを保護することについて真剣に考えています。よって、私たちはユーザのためにこの問題を修正することにしました。修正にあたり、私たちは Firefox の :visited の振る舞いを変更します。この修正が反映されるのがどのバージョンなのかはまだわかっていませんし、修正するコードもまだレビュー段階にあります。しかし、私たちはこの問題の修正について早いうちから皆さんに知っていただきたいため、現時点での情報をお伝えすることにしました。

:visited の振る舞いの修正は Web サイトや開発者に影響を及ぼしますので、デザイナーや開発者の方は注意してください。変更点は次のとおりです。

  • getComputedStyle は偽の情報を返します (querySelector など似通った関数についても同様です)。これらの関数は、たとえユーザがそのサイトにアクセスしていても、していないと偽って値を返すようになります。
  • 訪問済のリンクにスタイルを適用することは引き続き可能ですが、利用できる機能は著しく限定されます。利用できる CSS プロパティは color, background-color, border-*-color, outline-color, そして fillstroke の色に関するプロパティになります。その他のプロパティについては、未訪問のリンクに与えられたものが代わりに利用されます。これらのプロパティの制限に加えて、rgba()hsla(), transparent を指定することができなくなります。

訳注: rgba(), hsla() については、不透明度 (A) の指定が適用されないだけでRGBについては反映されます(:link で不透明度が指定されていれば、それが適用されます)。

広く使われているのが明らかなスタイルだけが引き続き適用されるということです。また、セレクタの挙動も次のように変更されます。

  • :visited + span など隣接セレクタ (結合子) を使用した場合、その span にはリンクが未訪問である時のスタイルが適用されます。
  • (稀ですが) リンク要素が入れ子になっており、マッチした要素が訪問情報をテスト中のリンクと異なる場合、その要素も未訪問リンクであるかのように扱われます。

これらの変更はわかりにくいので、別のポストで例示することにします。

Web 開発者への影響は最小限にとどめています。これは私たちの意図でもあります。しかし、Web サイトの修正を余儀なくされるケースも存在します。

  • 訪問済リンクに 背景画像 を与えてスタイルを区別する方法は今後機能しなくなります。
  • 訪問済リンクに与えた CSS Transitions を私たちはサポートしません。CSS Transitions を利用した Web サイトはまだ多くなくあまり影響はないと考えていますが、サポートされないケースとして知っておいてください。

私たちは皆さんがどう :visited を利用しているのか、また皆さんのサイトにどのような影響があるのかを知りたいと思っています。これらの変更によって壊れてしまうものがあるなら、最低でもそのケースをまとめておきたいのです。情報をお持ちの方は、他の人にもわかるようにぜひコメントをお願いします。