:visited özelliğini daha gizli hale getirme

Kyra Seevers
Kyra Seevers

Yayınlanma tarihi: 2 Nisan 2025

Bir bağlantıyı tıkladığınızda ne olur? Mor renge dönüyor.

İnternetin ilk günlerinden beri siteler, kullanıcıların daha önce tıkladığı bağlantılara özel stiller uygulamak için CSS :visited seçicisini kullanmaktadır. Siteler, :visited seçiciyi kullanarak kullanıcı deneyimini iyileştirebilir ve kullanıcılarının web'de gezinmesine yardımcı olabilir. Ancak ziyaret edilen bağlantıların özelleştirilebilirliği zaman içinde arttıkça güvenlik araştırmacıları tarafından keşfedilen saldırıların sayısı da arttı.

Bu saldırılar, kullanıcının ziyaret ettiği bağlantıları açığa çıkarabilir ve web'de gezinme etkinliğiyle ilgili ayrıntıları sızdırabilir. Bu güvenlik sorunu 20 yıldan uzun süredir web'i rahatsız ediyor. Tarayıcılar, bu geçmiş algılama saldırılarını azaltmak için çeşitli geçici çözümler uyguladı. Bu önlemler sayesinde saldırılar yavaşlatılmış olsa da ortadan kaldırılmamıştır.

Chrome 136'tan itibaren Chrome, bu saldırıları geçersiz kılan ilk büyük tarayıcı oldu. Bu işlem, :visited bağlantı geçmişi bölümlenerek yapılır.

Daha önce ziyaret ettiğiniz bağlantıları görüntülemek için tarayıcının zaman içinde ziyaret ettiğiniz sayfaları takip etmesi gerekir. Buna :visited geçmişiniz denir. CSS :visited seçicisini kullanarak ziyaret edilen bağlantıları ziyaret edilmeyenlerden farklı şekilde biçimlendirebilirsiniz:

:visited {
  color: purple;
  background-color: yellow;
  }

:visited geçmişi geçmişte bölümlendirilmemişti. Bu, :visited seçici kullanılarak :visited geçmişinin nerede gösterilebileceğiyle ilgili herhangi bir kısıtlama olmadığı anlamına geliyordu. Tıkladığınız bağlantılar, bu bağlantıyı gösteren her sitede :visited olarak gösterilir. Bu, saldırıların kullanıcının tarama geçmişiyle ilgili bilgileri açığa çıkarmasına olanak tanıyan temel tasarım hatasıydı.

Aşağıdaki örneği inceleyin. A sitesine göz atarken B sitesine gitmek için bir bağlantıyı tıklarsınız. Bu senaryoda B sitesi :visitedgeçmişinize eklenir. Daha sonra, Site Evil'ı ziyaret edebilirsiniz. Bu site de B sitesine bir bağlantı oluşturur. Bölme olmadan, Kötü Site'deki bağlantıyı tıklamasanız bile Kötü Site, B sitesine giden bağlantıyı :visited olarak gösterir. Ardından Kötü Site, bağlantının :visited olarak biçimlendirilip biçimlendirilmediğini öğrenmek için bir güvenlik açığını kullanabilir. Böylece, geçmişte B sitesini ziyaret ettiğinizi öğrenerek tarama geçmişinizle ilgili bilgileri sızdırabilir.

Bölme yapmadan önce bir bağlantıyı tıkladığınızda:

Kullanıcıyı, site-b.com bağlantısının gösterildiği site-a.com sayfasında gösterir.

Bu bağlantıyı gösteren her sitede :visited olarak gösterilir.

site-a.com ile site-evil.com'u gösterir. Her iki sayfa da site-b.com'a giden aynı bağlantıyı gösterir ve bu bağlantı ziyaret edilmiş olarak biçimlendirilir.

Bölme, bir bağlantıyı yalnızca bu siteden daha önce tıkladıysanız ziyaret edilmiş olarak göstererek tarama geçmişinizi korur. Bu siteyle daha önce etkileşimde bulunmadıysanız bağlantıları :visited olarak biçimlendirilmez.

Önceki örneği, bölümlendirmenin etkin olduğu şekilde düşünün. A sitesine göz atarken B sitesine gitmek için bir bağlantıyı tıklarsanız "A sitesi + B sitesi" kombinasyonu :ziyaret edilenler geçmişinize kaydedilir. Bu sayede, Kötü Site'yi ziyaret ettiğinizde "Site A + Site B " girişimizin her iki parçasıyla da (ilk olarak bağlantıyı tıkladığınız bağlam) eşleşmediği için Site B'ye giden bağlantı :visited olarak gösterilmez. Kötü Site'de tarama geçmişi gösterilmediğinden, kötüye kullanımdan yararlanamaz. Bu nedenle, tarayıcı geçmişiniz güvendedir.

Bölme işleminden sonra bir bağlantıyı tıkladığınızda:

Kullanıcıyı, site-b.com bağlantısının gösterildiği site-a.com sayfasında gösterir.

Yalnızca daha önce tıkladığınız yerlerde :visited olarak gösterilir.

site-a.com'u site-evil.com ile birlikte gösterir. Her iki sayfa da site-b.com'a giden aynı bağlantıyı gösterir ve yalnızca site-a.com'daki bağlantı ziyaret edilmiş olarak biçimlendirilir.

Kısaca, bölümlendirme, bağlantılarınızı tıklandıkları yerle ilgili ek bilgilerle birlikte depolama işlemidir. Chrome'da bunlar: bağlantı URL'si, üst düzey site ve çerçeve kaynağı. Bölme etkinleştirildiğinde :visited geçmişiniz artık herhangi bir sitenin sorgulayabileceği genel bir liste değildir. Bunun yerine, :visited geçmişiniz "bölünür" veya bu bağlantıyı ilk kez ziyaret ettiğiniz bağlama göre ayrılır.

Bağlantı URL'si, üst düzey site ve çerçeve kaynağı üzerinden bilgi akışını gösterir.

İnternette gezinirken, hepsi aynı sitedeki farklı alt sayfalara yönlendiren birçok bağlantıyı tıklayabilirsiniz. Örneğin, farklı metal türlerini araştırırken "krom" ve "pirinç" için Site.Wiki sayfalarını ziyaret edebilirsiniz.

Katı bir bölümlendirme uygulamasında, altın için Site.Wiki sayfasındaki kullanıcılara krom ve pirinç sayfalarının bağlantıları :visited olarak gösterilmez. Bunun nedeni, kullanıcının bu sayfaların her birini, altın için Site.Wiki sayfasıyla eşleşmeyen bir üst düzey siteden tıklamasıdır.

Kullanıcı, metals.com adresinden site.wiki'deki bir dizi bağlantıyı ziyaret etmiş olsa bile tıklama metals.com'dan geldiği için bu bağlantılara ziyaret edilmiş olarak stil uygulanmaz.

Bu senaryoda kullanıcı deneyimini iyileştirmek ve aynı zamanda bölümlendirmenin gizlilik ve güvenlik korumalarını sunmak için kendi kendine bağlantılar için bir istisna sunduk. Özet olarak, bir site kendi alt sayfalarını :visited olarak gösterebilir. Bu bağlantılar daha önce bu bağlamda tıklanmasa bile. Sitelerin, kullanıcıların alt sayfalarını ziyaret edip etmediğini izlemenin başka yöntemleri olduğundan kendi kendine bağlantıların kullanıma sunulmasıyla bu sitelere yeni bilgi verilmez. Bölme işlemi, siteler arası izlemeye karşı koruma sağlamaya ve aynı kaynak politikasını uygulamaya devam eder. Ancak bunun yalnızca bir sitenin kendi alt sayfalarına yönlendiren bağlantılar için geçerli olduğunu unutmayın. Üçüncü taraf sitelerine veya üçüncü taraf iFrame'lerine yönlendiren bağlantılar bu istisna için uygun değildir.

"Kendine bağlantılar" hariç tutma işleminden sonra:

Aynı sitenin alt sayfaları olan kendi kendine bağlantılar artık ziyaret edilmiş olarak işaretlenir.

Uygulama durumu

:visited güvenlik ve gizliliğindeki bu iyileştirmeler, Chrome 136 sürümünden itibaren kullanılabilir. Chrome, kullanıcılar için bu korumaları uygulayan ilk tarayıcı oldu.

Etkileşim kurma ve geri bildirim paylaşma