- 長年の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 内のサードパーティリンクにはこの例外は適用されない
機能導入状況
1件のコメント
GeekNewsでも
:visitedを活用してみようとしたのですが、セキュリティ上の理由でほとんどできることがなくて諦めていたんですよね。これがすべて反映されれば、さまざまなスタイリングが可能になるかもしれません。