Ustawianie :visited jako bardziej prywatne

Kyra Seevers
Kyra Seevers

Data publikacji: 2 kwietnia 2025 r.

Co się dzieje, gdy klikniesz link? Zmienia kolor na fioletowy.

Od początków internetu witryny korzystają z selektora CSS :visited, aby stosować niestandardowe style do linków, które użytkownicy kliknęli wcześniej. Za pomocą selektora :visited witryny mogą zwiększać wygodę użytkowników i ułatwiać im nawigację po Internecie. Jednak wraz ze wzrostem możliwości dostosowywania odwiedzanych linków wzrosła również liczba ataków wykrytych przez badaczy bezpieczeństwa.

Ataki te mogą ujawnić, które linki odwiedził użytkownik, oraz ujawnić szczegóły jego aktywności w sieci. Ten problem z bezpieczeństwem występuje w internecie od ponad 20 lat, a przeglądarki wdrażają różne tymczasowe rozwiązania, aby ograniczać te ataki na wykrywanie historii. Chociaż te środki mogą spowolnić ataki, nie zapobiegają im.

Począwszy od wersji 136 Chrome jest pierwszą główną przeglądarką, która uniemożliwia te ataki. Osiąga się to przez partycjonowanie historii linków :visited.

Aby wyświetlać linki, które zostały wcześniej odwiedzone, przeglądarka musi prowadzić rejestr stron odwiedzanych przez Ciebie na przestrzeni czasu. Jest to tzw. historia :visited. Możesz stylizować odwiedzone linki inaczej niż nieodwiedzone za pomocą selektora CSS :visited:

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

W przeszłości historia :visited była niedzielona. Oznacza to, że nie było żadnych ograniczeń dotyczących wyświetlania historii :visited za pomocą selektora :visited. Jeśli klikniesz link, w każdej witrynie, w której się on znajduje, będzie on oznaczony jako „Odwiedzono”. Był to podstawowy błąd konstrukcyjny, który umożliwiał atakującym ujawnianie informacji o historii przeglądania użytkownika.

Rozważ ten przykład. Przeglądasz witrynę A i klikasz link, aby przejść do witryny B. W tym scenariuszu witryna B zostanie dodana do historii :visited. Później możesz odwiedzić witrynę Site Evil, która również tworzy link do witryny B. Bez partycjonowania witryna Site Evil wyświetliłaby link do witryny B jako :visited, nawet jeśli nie klikniesz tego linku w witrynie Site Evil. Następnie witryna Zła może wykorzystać lukę w zabezpieczeniach, aby dowiedzieć się, czy link miał styl :visited, i w ten sposób uzyskać informacje o tym, że odwiedziłeś/odwiedziłaś w przeszłości witrynę B., co powoduje wyciek informacji z historii przeglądania.

Przed podziałem, gdy kliknąłeś link:

Użytkownik na stronie site-a.com, która zawiera link do witryny site-b.com.

W przypadku każdej witryny wyświetlającej ten link będzie on widoczny jako „Odwiedzono”.

Pokazuje stronę site-a.com obok strony site-evil.com. Obie strony zawierają ten sam link do strony site-b.com, który jest oznaczony jako odwiedzony.

Partycjonowanie chroni Twoją historię przeglądania, wyświetlając jako odwiedzony tylko ten link, jeśli kliknąłeś go wcześniej w tej witrynie. Jeśli nie nawiązałeś(-aś) wcześniej kontaktu z tą witryną, linki do niej nie będą stylizowane jako :visited.

Rozważ poprzedni przykład, ale z włączonym podziałem. Gdy przeglądasz witrynę A i klikasz link, aby przejść do witryny B, kombinacja „Witryna A + Witryna B” jest zapisywana w historii odwiedzonych stron. Dzięki temu, gdy odwiedzisz witrynę Evil, jej link do witryny B nie będzie wyświetlany jako :visited, ponieważ nie pasuje do obu części wpisu „Witryna A + Witryna B” (kontekst, w którym kliknąłeś link). Ponieważ w Site Evil nie wyświetla się historia przeglądania, nie może ona korzystać z żadnych luk. Dzięki temu Twoja historia przeglądania jest bezpieczna.

Po podzieleniu i kliknięciu linku:

Użytkownik na stronie site-a.com, która zawiera link do witryny site-b.com.

Jest ona wyświetlana tylko jako :visited w miejscach, w których została kliknięta wcześniej.

Pokazuje stronę site-a.com obok strony site-evil.com. Obie strony zawierają ten sam link do witryny site-b.com, ale tylko link na stronie site-a.com ma styl wskazujący, że strona została odwiedzona.

Krótko mówiąc, partycjonowanie polega na przechowywaniu linków z dodatkowymi informacjami o tym, gdzie zostały kliknięte. W Chrome są to: adres URL linku, witryna najwyższego poziomuźródło ramki. Po włączeniu partycjonowania historia :visited nie jest już listą globalną, do której dostęp ma każda witryna. Zamiast tego historia :visited jest „dzielona” lub dzielona na podstawie kontekstu, w którym kliknąłeś dany link.

Pokazuje przepływ informacji przez adres URL linku, witrynę najwyższego poziomu i element źródłowy ramki.

Podczas przeglądania internetu możesz kliknąć wiele linków, które prowadzą do różnych podstron w tej samej witrynie. Na przykład podczas wyszukiwania różnych rodzajów metali możesz odwiedzić strony Site.Wiki dotyczące „chromu” i „mosiądzu”.

W przypadku sztywnego wdrożenia podziału użytkownicy na stronie Site.Wiki dotyczącej złota nie mieliby linków do stron z informacjami o chromie i mosiądzu, które są wyświetlane jako :visited. Wynika to z tego, że użytkownik kliknął każdą z tych stron z witryny najwyższego poziomu, która nie pasuje do strony Site.Wiki dla złota.

Mimo że użytkownik odwiedził zestaw linków na stronie site.wiki z witryny metals.com, nie są one oznaczone jako odwiedzone, ponieważ kliknięcie pochodziło z witryny metals.com.

Aby w tym przypadku poprawić komfort użytkowników, a jednocześnie zachować ochronę prywatności i bezpieczeństwo, wprowadziliśmy wyjątek dla linków do własnych witryn. Krótko mówiąc, witryna może wyświetlać własne podstrony jako :visited, nawet jeśli te linki nie były wcześniej klikane w tym kontekście. Witryny mają inne metody śledzenia, czy użytkownik odwiedził ich podstrony, więc wprowadzenie linków do własnych stron nie powoduje przekazywania do tych witryn żadnych nowych informacji. Partycjonowanie nadal chroni przed śledzeniem w witrynach i egzekwuje zasadę jednego źródła. Pamiętaj jednak, że dotyczy to tylko linków do własnych podstron witryny. Wyjątek ten nie dotyczy linków do witryn innych firm ani do elementów iframe innych firm.

Po wyłączeniu „linków do własnych stron”:

Linki do tej samej strony są teraz oznaczane jako odwiedzone, gdy są to podstrony tej samej witryny.

Stan wdrożenia

Te ulepszenia dotyczące bezpieczeństwa i prywatności w :visited są dostępne od wersji 136 przeglądarki Chrome. Chrome jest pierwszą przeglądarką, która wdraża te zabezpieczenia na rzecz użytkowników.

Zaangażowanie i przesyłanie opinii