Rendere :visited più privato

Kyra Seevers
Kyra Seevers

Pubblicata: 2 aprile 2025

Cosa succede quando fai clic su un link? diventa viola.

Fin dai primi giorni di internet, i siti si basano sul selettore :visited CSS per applicare stili personalizzati ai link su cui gli utenti hanno fatto clic in precedenza. Utilizzando il selettore :visited, i siti possono migliorare la propria esperienza utente e aiutare gli utenti a navigare sul web. Tuttavia, con l'aumento della personalizzazione dei link visitati nel tempo, è aumentato anche il numero crescente di attacchi scoperti dai ricercatori di sicurezza.

Questi attacchi possono rivelare i link visitati da un utente e divulgare dettagli sulla sua attività di navigazione web. Questo problema di sicurezza affligge il web da oltre 20 anni e i browser hanno implementato vari rimedi temporanei per mitigare questi attacchi di rilevamento della cronologia. Sebbene questi accorgimenti rallentino gli attacchi, non li eliminano.

A partire da Chrome 136, Chrome è il primo browser importante a rendere obsoleti questi attacchi. Ciò viene ottenuto suddividendo la cronologia dei link di :visited.

Per visualizzare i link che hai visitato in precedenza, il browser deve tenere traccia delle pagine che hai visitato nel tempo. Si tratta della cronologia :visited. Puoi impostare uno stile diverso per i link visitati rispetto a quelli non visitati utilizzando il selettore CSS :visited:

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

In passato, la cronologia di :visited non era partizionata. Ciò significava che non esistevano limitazioni su dove poteva essere visualizzata la cronologia :visited utilizzando il selettore :visited. Se hai fatto clic su un link, questo verrà visualizzato come :visited su ogni sito che lo mostra. Questo era il principale difetto di progettazione che consentiva agli attacchi di rivelare informazioni sulla cronologia di navigazione dell'utente.

Considera l'esempio seguente. Stai navigando sul sito A e fai clic su un link per andare al sito B. In questo scenario, il sito B verrà aggiunto alla tua :visited cronologia. In un secondo momento, potresti visitare il sito Cattivo, che crea un link anche al sito B. Senza la partizione, il sito Cattivo mostrerebbe il link al sito B come :visited, anche se non avessi fatto clic sul link sul sito Cattivo. Il sito malevolo potrebbe quindi utilizzare un exploit di sicurezza per scoprire se il link è stato stilato come :visited, quindi sapere che hai visitato il sito B in passato, divulgando informazioni sulla tua cronologia di navigazione.

Prima del partizionamento, quando facevi clic su un link:

Mostra all'utente la pagina sito-a.com che mostra un link a sito-b.com.

Verrà visualizzato come :visited su ogni sito che mostra il link.

Mostra lo stesso sito-a.com insieme a sito-cattivo.com. Entrambe le pagine mostrano lo stesso link a sito-b.com e sono contrassegnate come visitate.

La partizione protegge la tua cronologia di navigazione mostrando un link come visitato solo se hai già fatto clic su quel link da questo sito. Se non hai mai interagito con questo sito, i relativi link non avranno lo stile :visited.

Prendi in considerazione l'esempio precedente, ma con il partizionamento abilitato. Stai navigando sul sito A e fai clic su un link per passare al sito B. La combinazione di "sito A + sito B" viene memorizzata nella cronologia :visited. In questo modo, quando visiti il sito Malevolo, il link al sito B non verrà visualizzato come :visited perché non corrisponde a entrambe le parti della voce "Sito A + Sito B" (il contesto in cui hai fatto clic sul link in origine). Poiché su Site Evil non viene visualizzata alcuna cronologia di navigazione, non può sfruttare alcun exploit. Pertanto, la tua cronologia del browser è al sicuro.

Dopo la suddivisione, quando fai clic su un link:

Mostra all'utente la pagina sito-a.com che mostra un link a sito-b.com.

Viene visualizzato come :visited solo se hai fatto clic su di esso in precedenza.

Mostra lo stesso sito-a.com insieme a sito-cattivo.com. Entrambe le pagine mostrano lo stesso link a sito-b.com e solo il link su sito-a.com è impostato come visitato.

In breve, il partizionamento si riferisce alla memorizzazione dei link con informazioni aggiuntive su dove sono stati fatti clic. In Chrome, si tratta di: URL del link, sito di primo livello, e origine del frame. Con la suddivisione in parti attivata, la cronologia :visited non è più un elenco globale a cui qualsiasi sito può eseguire query. La cronologia :visited è invece "partizionata" o separata in base al contesto in cui hai visitato il link per la prima volta.

Mostra il flusso di informazioni tramite l'URL del link, il sito di primo livello e l'origine del frame.

Quando navighi su internet, potresti fare clic su molti link che rimandano tutti a sottopagine diverse dello stesso sito. Ad esempio, quando effettui ricerche su diversi tipi di metalli, potresti visitare le pagine Site.Wiki per "cromo" e "ottone".

In caso di un'implementazione rigida del partizionamento, gli utenti nella pagina Site.Wiki per il colore oro non vedrebbero i link alle pagine di cromo e ottone visualizzati come :visited. Questo perché l'utente ha fatto clic su ciascuna di queste pagine da un sito di primo livello che non corrisponde alla pagina Site.Wiki per l'oro.

Anche se l'utente ha visitato un insieme di link su site.wiki da metals.com, questi non vengono visualizzati come visitati perché il clic è stato effettuato da metals.com.

Per migliorare l'esperienza utente in questo scenario, pur garantendo le protezioni della privacy e della sicurezza del partizionamento, abbiamo introdotto un'esclusione per i link diretti. In breve, un sito può mostrare le proprie sottopagine come :visited, anche se non sono stati ancora selezionati i link in questo contesto. Poiché i siti hanno altri metodi per monitorare se un utente ha visitato le relative sottopagine, l'introduzione dei link diretti non fornisce nuove informazioni a questi siti. La partizione protegge comunque dal monitoraggio tra siti e applica il criterio di stessa origine. Tuttavia, è importante notare che questo vale solo per i link alle sottopagine di un sito. I link a siti di terze parti o in iframe di terze parti non sono idonei per questa eccezione.

Dopo l'esclusione dei "link diretti":

I link diretti ora sono contrassegnati come visitati quando sono sottopagine dello stesso sito.

Stato dell'implementazione

Questi miglioramenti alla sicurezza e alla privacy di :visited sono disponibili a partire dalla versione 136 di Chrome. Chrome è il primo browser a implementare queste protezioni per gli utenti.

Coinvolgere e condividere feedback