Het maken van: bezocht meer privé

Kyra Seevers
Kyra Seevers

Gepubliceerd: 2 april 2025

Wat gebeurt er als u op een link klikt? Het wordt paars!

Sinds de begindagen van het internet vertrouwen sites op de CSS :visited selector om aangepaste stijlen toe te passen op links waarop gebruikers eerder hebben geklikt. Met behulp van de :visited -selector kunnen sites hun gebruikerservaring verbeteren en hun gebruikers helpen bij het navigeren op internet. Maar naarmate de aanpasbaarheid van bezochte links in de loop van de tijd is toegenomen, geldt dat ook voor het groeiende aantal aanvallen dat door beveiligingsonderzoekers wordt ontdekt .

Deze aanvallen kunnen onthullen welke links een gebruiker heeft bezocht en kunnen details over zijn surfactiviteit op internet lekken. Dit beveiligingsprobleem heeft het internet al meer dan twintig jaar geplaagd, en browsers hebben verschillende oplossingen geïmplementeerd om deze aanvallen op het gebied van geschiedenisdetectie te beperken. Hoewel de aanvallen door deze maatregelen worden afgeremd, worden ze niet geëlimineerd.

Vanaf Chrome 136 is Chrome de eerste grote browser die deze aanvallen overbodig maakt. Dit wordt bereikt door de linkgeschiedenis van :visited te partitioneren.

Om weer te geven welke links u eerder heeft bezocht, moet de browser bijhouden welke pagina's u in de loop van de tijd heeft bezocht. Dit wordt uw :visited geschiedenis genoemd. U kunt bezochte links anders opmaken dan niet-bezochte links met behulp van de CSS :visited selector:

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

Historisch gezien was de :visited geschiedenis niet gepartitioneerd . Dit betekende dat er geen beperkingen waren voor waar :visited -geschiedenis kon worden weergegeven met behulp van de :visited selector. Als u op een link klikt, wordt deze weergegeven als :visited op elke site waarop die link wordt weergegeven. Dit was de belangrijkste ontwerpfout waardoor aanvallen informatie over de browsegeschiedenis van de gebruiker konden onthullen.

Beschouw het volgende voorbeeld. U surft op site A en klikt op een link om naar site B te gaan. In dit scenario wordt site B toegevoegd aan uw :visited geschiedenis. Later kunt u Site Evil bezoeken, dat ook een link naar Site B creëert. Zonder partitionering zou Site Evil die link naar Site B weergeven als :visited , ook al had je niet op de link op Site Evil geklikt. Vervolgens zou Site Evil een beveiligingslek kunnen gebruiken om te achterhalen of de link de stijl :visited , en zo te weten komen dat u Site B in het verleden hebt bezocht, waardoor informatie over uw browsegeschiedenis werd gelekt.

Voordat u ging partitioneren, toen u op een link klikte:

Toont de gebruiker op de pagina site-a.com die een link naar site-b.com weergeeft.

Het zou worden weergegeven als :bezocht op elke site waarop die link wordt weergegeven!

Toont dezelfde site-a.com naast site-evil.com. Op beide pagina's wordt dezelfde link naar site-b.com weergegeven en deze is vormgegeven als bezocht.

Partitioneren beschermt uw browsegeschiedenis door een link alleen als bezocht weer te geven als u eerder op die link op deze site hebt geklikt. Als u nog niet eerder interactie met deze site heeft gehad, zullen de links ervan niet de stijl :visited hebben.

Beschouw het voorgaande voorbeeld, maar dan met partities ingeschakeld. U surft op Site A en klikt op een link om naar Site B te gaan. De combinatie van "Site A + Site B" wordt opgeslagen in uw bezochte geschiedenis. Op deze manier wordt, wanneer u Site Evil bezoekt, de link naar Site B niet weergegeven als :visited , omdat deze niet overeenkomt met beide delen van ons item "Site A + Site B" (de context waarin u oorspronkelijk op de link klikte). Omdat er geen browsegeschiedenis wordt weergegeven op Site Evil, kan het geen misbruik maken van eventuele exploits. Daarom is uw browsergeschiedenis veilig!

Als u na het partitioneren op een link klikt:

Toont de gebruiker op de pagina site-a.com die een link naar site-b.com weergeeft.

Het wordt alleen weergegeven als :visited waar u er eerder op hebt geklikt!

Toont dezelfde site-a.com naast site-evil.com. Op beide pagina's wordt dezelfde link naar site-b.com weergegeven en alleen de link op site-a.com wordt weergegeven als bezocht.

Kort gezegd verwijst partitioneren naar het opslaan van uw links met aanvullende informatie over waar erop is geklikt. In Chrome is dit: link-URL, site op het hoogste niveau en frameoorsprong . Als partities zijn ingeschakeld, is uw :visited -geschiedenis niet langer een globale lijst die door elke site kan worden opgevraagd. In plaats daarvan wordt uw :visited -geschiedenis "gepartitioneerd" of gescheiden door de context van waaruit u die link in de eerste plaats hebt bezocht.

Toont de informatiestroom via de link-URL, de site op het hoogste niveau en de oorsprong van het frame.

Wanneer u op internet surft, klikt u mogelijk op veel links die allemaal verwijzen naar verschillende subpagina's op dezelfde site. Als u bijvoorbeeld verschillende soorten metalen onderzoekt, kunt u de Site.Wiki -pagina's bezoeken voor 'chroom' en 'messing'.

Onder een rigide implementatie van partitionering zouden bij gebruikers op de Site.Wiki -pagina voor goud de links naar de Chrome- en Brass-pagina's niet worden weergegeven als :visited . Dit komt omdat de gebruiker op elk van deze pagina's heeft geklikt vanaf een site op het hoogste niveau die niet overeenkomt met de Site.Wiki -pagina voor goud.

Hoewel de gebruiker een reeks links op site.wiki van metal.com heeft bezocht, worden deze niet weergegeven als bezocht, omdat de klik afkomstig was van metal.com.

Om de gebruikerservaring in dit scenario te verbeteren en toch de privacy- en veiligheidsbescherming van partities te bieden, hebben we een uitzondering voor zelfkoppelingen geïntroduceerd. Kortom, een site kan zijn eigen subpagina's weergeven als :visited , zelfs als er niet eerder in deze context op deze links is geklikt. Omdat sites andere methoden hebben om bij te houden of een gebruiker zijn subpagina's heeft bezocht, wordt er met de introductie van zelflinks geen nieuwe informatie aan deze sites gegeven. Partitionering beschermt nog steeds tegen tracking tussen sites en dwingt hetzelfde beleid af. Maar het is belangrijk op te merken dat dit alleen van toepassing is op links naar de eigen subpagina's van een site. Links naar sites van derden of in iframes van derden komen niet in aanmerking voor deze uitzondering.

Na de uitsplitsing van de "self-links":

De zelflinks worden nu gemarkeerd als bezocht als ze subpagina's van dezelfde site zijn.

Implementatiestatus

Deze verbeteringen aan de beveiliging en privacy van :visited zijn beschikbaar vanaf Chrome-versie 136. Chrome is de eerste browser die deze beveiligingen voor gebruikers implementeert.

Betrek en deel feedback