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
.
Che cos'è la :visited
partizione dei link?
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:
Verrà visualizzato come :visited su ogni sito che mostra il link.
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:
Viene visualizzato come :visited
solo se hai fatto clic su di esso in precedenza.
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.
Che dire dei link ad altre pagine dello stesso sito?
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.
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":
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
- La proposta originale.
- Fai domande e partecipa alle discussioni.
- Segnala un bug nel tracker di Chromium se ritieni che qualcosa non funzioni come previsto.