13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Chrome135】訪問済のリンクが訪問済になったりならなかったりする

Posted at

Partitioning :visited links historyという提案があります。
2025年4月にリリースされるChrome135有効になる機能です。

これ実はユーザにわりと影響のある変更なのですが、全く知られておらず話題にも上がっていないんですよね。
なにせ日本語記事が一切見当たらない。

ということで、ここで紹介しておきます。

具体的にどうなるの?

まずGoogleYahooJapanで同じ語句を検索します。
ここでは例としてPHP8.4がリリースされたので新機能全部やるを使います(宣伝)。

この記事を見たことがない場合、リンクは未訪問です。

01.png

ここでGoogleから記事へのリンクを踏むと、YahooJapanから該当記事へのリンクも訪問済になります。

02.png

当然ですね。

それではchrome://flags/からpartition-visited-link-databaseを有効にしましょう。
これはせChrome134以下でもPartitioning :visited links historyを有効化するフラグです。

その後Googleからリンクを踏むと、Google側のリンクは訪問済みになります。

ところがYahooJapanからのリンクは未訪問のままです。

03.png

なんで?

どうしてこんなことをする必要が?

かつては疑似クラス:visitedのプロパティをJavaScriptやCSSから取得することが可能でした。
その結果どうなったかというと、もちろん隠しリンクを大量に並べてユーザの訪問履歴を奪取することでフィンガープリントしたりやターゲティング広告したりする攻撃が蔓延ることになりました。

その対策として、最終的に:visitedプロパティは取得できないようになり、またほとんどのプロパティは設定もできないようになりました。
取得しようとすると常に未訪問というステータスが返ります。
設定できない理由は、たとえばheightなどを変更すれば訪問済かどうかを簡単に取得できてしまうからですね。

ここで問題が終わればよかったのですが、実際はそれだけで解決することはなく、たとえばCSS transitionで訪問済を抜くAmbient Light Sensorを使って画面の明るさで訪問済か判断するタイミング攻撃などの脆弱性がその後も頻発することになりました。

また特に斬新なものとしてこんなものもあります

04.png

よくあるCAPTCHA認証に見えますが、実際は黒が:visitedリンクとなっており、つまりユーザが訪問済サイトを自己申告してくれるという代物です。
これに至ってはブラウザ側で防ぐことすらできません。

ということで、本問題に対して、ついに根本的な対策が行われることになりました。

Explainer: Partitioning :visited links history

本提案をひとことでまとめると、訪問済かどうかを判定する基準が、これまで『リンク先サイト』だけだったところを、『リンク元サイト+リンク先サイト』に変更します。

考え方としてはCookieのパーティショニングCHIPSだいたい同じです。

この変更によってどうなるかというと、たとえばさきほどのCAPTCHA認証のふりをした攻撃サイトでは、全てのリンクが常に未訪問になります。
攻撃サイトに訪問履歴が流出することがなくなりました。

もちろん自身のWebサイトからリンクを辿って行った場合の情報は取得できるわけですが、これはそもそもクリックを取得するなりでどうとでもできるので本提案の対象外です。
問題は、自サイトから訪れたわけではない訪問済サイトがわかってしまうことだったので、この問題については完全解決されました。

他ブラウザの反応

Firefoxはポジティブであり、おそらくそのうち実装されます。
そもそも本提案の原案となった:visitedプロパティ設定・取得制限を率先して行ったのがMozillaですからね。

Safariはいまのところ方針を決めていませんが、妥当だろうとは言っているのでいずれ対応されると思います。

ユーザへの影響

最初に言ったとおりの問題が発生します。

『サイトAからサイトXに行ったら、サイトAからサイトXへのリンクは訪問済なのに、サイトBやCからサイトXへのリンクは未訪問』

たとえば複数の個人リンク集サイトから情報収集している人なんかが、「あれ?これさっき見たはずなのに訪問済じゃないぞ?」ってなりそうです。

感想

本提案そのものは妥当な変更であると、個人的には思います。

ただ、けっこうユーザに影響のある大きな変更だと思うのですが、そのわりにユーザへの周知などは全然行われていません。
理由としては許容可能な範囲だろうからまあいいんじゃねだそうです。
さすがにもうちょっと発信してほしいところですね。

13
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?