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
.
Co to jest podział 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:
W przypadku każdej witryny wyświetlającej ten link będzie on widoczny jako „Odwiedzono”.
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:
Jest ona wyświetlana tylko jako :visited
w miejscach, w których została kliknięta wcześniej.
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 i ź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.
A co z linkami do innych stron w tej samej witrynie?
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.
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”:
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
- Pierwotny projekt,
- zadawać pytania i uczestniczyć w dyskusjach.
- Jeśli uważasz, że coś nie działa zgodnie z oczekiwaniami, zgłoś błąd w śledzeniu Chromium.