Stringhe User-Agent e Client Hints: cosa rivelano e cosa è stato congelato

La stringa user agent è il più antico segnale di identificazione del web e quello che è cambiato di più negli ultimi anni. Leggerla bene significa sapere cosa contiene ancora, cosa è stato congelato di proposito e dove sono finiti i dettagli rimossi.
Cosa dice la stringa
Una stringa Chromium attuale su Windows ha questo aspetto: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36. I token storici (Mozilla/5.0, AppleWebKit, like Gecko, Safari) sono lì per compatibilità con script scritti decenni fa e non portano alcuna informazione. Le parti utili sono la piattaforma (Windows NT 10.0, anche su Windows 11), l'architettura e la versione principale del browser.
Ciò che prima c'era è stato rimosso di proposito. La versione minore e di patch ora è 0.0.0. La versione di Windows è fissata a 10.0. Le stringhe Android non includono più il modello del dispositivo. È la «user agent reduction» che Chromium ha introdotto tra il 2022 e il 2023 proprio perché la stringa era diventata una superficie di fingerprinting.
Client Hints: gli stessi dati, su richiesta
I dettagli rimossi non sono spariti; si sono spostati negli User-Agent Client Hints. Un server può chiedere campi specifici con un header Accept-CH, e il browser invierà poi header come Sec-CH-UA-Platform-Version o Sec-CH-UA-Model nelle richieste successive. Gli hint a bassa entropia (marchio e versione principale, piattaforma, flag mobile) vengono inviati per impostazione predefinita. Quelli ad alta entropia (versione completa, architettura, bitness, modello, versione della piattaforma) vengono inviati solo ai siti che li richiedono, e uno script può richiedere lo stesso insieme tramite navigator.userAgentData.getHighEntropyValues().
L'obiettivo del progetto è che il sito debba dichiarare cosa vuole, rendendo la raccolta visibile e verificabile. In pratica, un sito che vuole fare fingerprinting può comunque chiedere tutto; la differenza è che la richiesta è qualcosa che il browser può vedere, registrare o rifiutare.
Il problema della coerenza
Poiché gli stessi fatti sono ora disponibili da due fonti, possono essere confrontati. Un browser che modifica la propria stringa user agent per dichiarare macOS ma lascia navigator.userAgentData.platform a riportare Windows ha creato una contraddizione banale da rilevare. Lo stesso vale per la proprietà navigator.platform, per i font specifici del sistema operativo visibili alla pagina e per la stringa del renderer WebGL, che nomina un driver grafico esistente su un solo sistema operativo. Falsificare la sola stringa è da anni una strategia perdente.
Leggere la propria
Una diagnostica mostra la stringa grezza, il browser e la versione che ne ricava e il motore (Blink, Gecko o WebKit). Nota che ogni browser su iOS riporta WebKit, qualunque cosa dica il marchio, perché Apple lo richiede. Se il nome del browser ricavato ti sorprende, la stringa viene alterata da un'estensione o da un'impostazione del profilo; se sia un problema dipende dal fatto che il resto del browser concordi con l'alterazione.


