訪問したリンクのフォントサイズを設定できないのはなぜですか?

こんにちは、Habr! 「訪問したリンクのフォントサイズを設定できないのはなぜですか」という記事の翻訳を提示します。ジムフィッシャー。







アクセスしたリンクは紫色で表示されます。 訪れていない-青で。 この違いは、Webの登場以来、私たちにもたらされました。 ただし、CSSでは、これらのプロパティを擬似セレクターで再構成できます。visited! このリンクが既にアクセスされていることをユーザーに示すために、訪問済みリンクをグレーにし、サイズを縮小するとします。



a:visited { color: gray; font-size: 6px; }
      
      





このスタイルは現在のページに適用されます:





予想どおり、リンクをグレーに色付けすると、既にアクセスされたことが通知されますが、フォントサイズは同じままです。 これは、フォントサイズの変更が脆弱性の原因になる可能性があるために発生します! CSSがフォントサイズを変更できる場合、私(Jim)はpornhub.comにアクセスしたかどうかを確認できます。 しかし、どのように?



Webページは、ページに表示されているアイテムを検査するために使用できます。 最も明白な方法は、window.getComputedStyle()を使用することです。 彼は、前述の訪問済みリンクに適用されるプロパティについて話しています。 ブラウザによって報告されたとおり:font-size:18px; 色:rgb(0、0、238)。



getComputedStyleが、訪問したリンクのフォントサイズの18pxから6pxへの変更を報告した場合、私(Jim)はページがpornhub.comへのリンクを作成したことを理解し、次にフォントサイズを確認してブラウザーの閲覧履歴を判断します。 このデータをターゲット広告に使用したり、データを販売したり、脅迫したりすることができます。...の場合、フォントサイズの変更を禁止することでセキュリティホールを閉鎖しました。



ただし、訪問したリンクの色についてgetComputedStyleを使用して取得した情報は、rgb(0、0、238)-つまり、青になります。 これは嘘です-リンクは灰色です! 色のプロパティについては、ブラウザは別の方法で脆弱性の穴を塞ぎます。変更を禁止する代わりに、getComputedStyleに実際の値について嘘をつくようにします。



なぜ2つのアプローチが使用されるのですか? getComputedStyleでfont-sizeパラメーターについても説明できないのはなぜですか? その理由は、getComputedStyle以外のメソッドを使用して、Webページの表示された要素を調べることができるからです。 .pageXOffsetまたは.pageYOffsetを使用して、ページ上の要素の位置を確認することもできます。 訪問したリンクのフォントサイズを変更すると、他の要素のオフセットに影響します。そのため、訪問したリンクを間接的に確認できます。 a:visitedのfont-sizeを無効にすることは、難しいが信頼できる解決策です。



このリンクには、色などの許可されたプロパティの短いリストが含まれていますが、これらはページレイアウトに影響を与えず、検出できません。 それらはすべて、色の変化の異なる形式です。 他のすべてのCSSプロパティはブロックされます。



理論的には、訪問したリンクの色が変更されたと判断する方法はありません。 唯一の可能性は一時的な攻撃です。たとえば、ピンクへの色の変化が青よりも長くかかった場合、ページは要素を表示するのにかかった時間を測定し、予想される時間と比較できます。



PS:

Olga Pereverzevaへの翻訳の調整にご協力いただきありがとうございます。



Oleg Yatsenko(Samber)のおかげで、コメントの中で、彼はそのようなデータ漏洩の問題の解決策が最初にMozillaで実装されたという事実に注意を喚起しました-ソリューションの著者はDavid Baronです。



All Articles