Halo, Habr! Saya mempersembahkan untuk Anda terjemahan dari artikel
“Mengapa saya tidak dapat mengatur ukuran font dari tautan yang dikunjungi?” oleh Jim Fisher.

Tautan yang dikunjungi ditampilkan dalam warna ungu; tidak dikunjungi - berwarna biru. Perbedaan ini telah datang kepada kita sejak munculnya web. Tetapi CSS memungkinkan kita untuk mengkonfigurasi ulang properti ini dengan pemilih-semu: dikunjungi! Katakanlah Anda ingin membuat tautan yang dikunjungi menjadi abu-abu dan memperkecil ukurannya untuk menunjukkan kepada pengguna bahwa tautan ini telah dikunjungi.
a:visited { color: gray; font-size: 6px; }
Gaya ini diterapkan ke halaman saat ini:
Mewarnai tautan dengan warna abu-abu, seperti yang diharapkan, memberi tahu kami bahwa itu telah dikunjungi, tetapi ukuran fontnya tetap sama! Ini terjadi karena mengubah ukuran font dapat menjadi penyebab kerentanan! Jika CSS dapat mengubah ukuran font, I (Jim) dapat mengetahui apakah Anda mengunjungi pornhub.com. Tapi bagaimana caranya?
Halaman web tersedia untuk memeriksa item yang ditampilkan pada halaman. Cara yang paling jelas adalah dengan menggunakan window.getComputedStyle (). Dia berbicara tentang properti yang diterapkan pada tautan yang dikunjungi tersebut; seperti yang dilaporkan oleh browser: font-size: 18px; warna: rgb (0, 0, 238).
Jika getComputedStyle melaporkan perubahan ukuran font dari 18px menjadi 6px untuk tautan yang dikunjungi, I (Jim) akan memahami bahwa laman tersebut telah membuat tautan ke pornhub.com, maka saya akan memeriksa ukuran font untuk menentukan riwayat penelusuran peramban Anda. Saya dapat menggunakan data ini untuk iklan bertarget, saya dapat menjual data Anda atau memeras Anda, dan seterusnya ... Lubang keamanan ditutup dengan melarang perubahan ukuran font untuk: dikunjungi.
Tetapi informasi yang diperoleh dengan menggunakan getComputedStyle tentang warna tautan yang dikunjungi adalah: rgb (0, 0, 238) - yaitu biru. Ini bohong - tautannya abu-abu! Untuk properti warna, browser menutup lubang dalam kerentanan dengan cara lain: alih-alih melarang perubahan, mereka memaksa getComputedStyle untuk berbohong tentang nilai sebenarnya.
Mengapa dua pendekatan digunakan? Mengapa kita tidak bisa membuat getComputedStyle berbohong tentang parameter ukuran font juga? Alasannya adalah bahwa Anda dapat memeriksa elemen yang ditampilkan dari halaman web dan metode lain selain getComputedStyle. Anda juga dapat memeriksa posisi elemen pada halaman menggunakan .pageXOffset atau .pageYOffset. Mengubah ukuran font tautan yang dikunjungi akan memengaruhi offset elemen lain, karena itu Anda dapat secara tidak langsung memeriksa tautan mana yang dikunjungi. Menonaktifkan ukuran font untuk: dikunjungi adalah solusi yang sulit namun dapat diandalkan.
Tautan ini menyediakan daftar pendek properti yang diizinkan, seperti warna, yang seharusnya tidak memengaruhi tata letak halaman dan tidak dapat dideteksi. Semuanya adalah bentuk perubahan warna yang berbeda. Semua properti CSS lainnya diblokir.
Secara teori, tidak ada cara untuk menentukan bahwa warna tautan yang dikunjungi telah diubah. Satu-satunya kemungkinan adalah serangan sementara: misalnya, jika mengubah warna menjadi merah muda lebih lama dari biru, laman dapat mengukur berapa lama untuk menampilkan elemen dan membandingkannya dengan durasi yang diharapkan.
PS:Terima kasih khusus untuk bantuan dalam menyesuaikan terjemahan ke
Olga Pereverzeva .
Terima kasih kepada Oleg Yatsenko (
Samber ), dalam komentarnya ia menarik perhatian pada fakta bahwa solusi untuk masalah dengan kebocoran data seperti itu pertama kali diterapkan di
Mozilla - penulis solusinya adalah
David Baron .