`:visited` をよりパーソナライズする - 訪問済みリンクのプライバシー強化
(developer.chrome.com)- 長年のWebセキュリティ問題である
:visitedリンクのスタイリングによる「ユーザーの閲覧履歴漏えい」問題を解決するため、新機能を導入 - Chrome 136から
:visited履歴を「分割保存(partitioning)」することで、これらの攻撃を根本的に防げる構造へと改善 - 訪問済みリンクを視覚的に区別する機能は維持しつつ、他のサイトから悪用できないように設計
:visited リンク分割保存方式の説明
- 従来方式では、リンクをクリックするとそのリンクはどのサイトでも
:visited状態で表示されていた - これは悪意のあるサイトがユーザーの閲覧履歴を追跡できてしまう、設計上のセキュリティ欠陥だった
- 例: Site-A で Site-B のリンクをクリックした後、Site-Evil にも同じリンクがある場合、Site-B は
:visitedと表示され、ユーザーが訪問したかどうかを知られてしまった - 新しい構造では、「サイト A + リンク先 B」という組み合わせ単位でのみ閲覧履歴を保存
- つまり、Site-Evil ではユーザーがそのリンクをクリックしていないため
:visitedと表示されない - 結果として閲覧履歴はもはやグローバルに保存されず、「リンク URL + トップレベルサイト + フレームのオリジン」を基準に分離保存される
同一サイト内リンクの処理方式
- 金属の種類を調べているユーザーが
metals.comでsite.wikiの chrome と brass のページをクリックしたと仮定 - その後
site.wikiの gold ページを訪れたとき、chrome と brass のリンクは:visitedと表示されない(クリックしたコンテキストが異なるため) - これを改善するため
self-linksの例外処理を導入 - 同一サイト内のサブページへのリンクは、同じコンテキストでクリックしていなくても
:visitedと表示される - これはサイト自体がユーザーの閲覧履歴を追跡できるため、追加の情報漏えいはないと判断され、許可されているもの
- ただし、サードパーティサイトや iframe 内のサードパーティリンクにはこの例外は適用されない
機能導入状況
- この機能は Chrome 136 から正式導入
- Chrome はこの機能を最初に導入した主要ブラウザ
- 開発者およびセキュリティ研究者は GitHub ページで提案書の確認、意見提示、バグ報告が可能
- 機能提案書 GitHub
- Issue 提案と議論に参加
- Chromium バグトラッカー
1件のコメント
GeekNewsでも
:visitedを活用してみようとしたのですが、セキュリティ上の理由でほとんどできることがなくて諦めていたんですよね。これがすべて反映されれば、さまざまなスタイリングが可能になるかもしれません。