Panoramica
Le API JavaScript del browser espongono una vasta gamma di informazioni sul sistema e sul browser. Questi segnali possono essere intercettati e modificati tramite iniezione JS a livello di proxy.
Vettori API
Navigator API
| Proprietà | Informazioni Rivelate | Falsificabile tramite JS |
|---|---|---|
navigator.userAgent |
Stringa browser/SO | Sì |
navigator.platform |
Piattaforma SO | Sì |
navigator.language |
Lingua primaria | Sì |
navigator.languages |
Preferenze linguistiche | Sì |
navigator.hardwareConcurrency |
Numero core CPU | Sì |
navigator.deviceMemory |
RAM in GB | Sì |
navigator.maxTouchPoints |
Supporto touch | Sì |
navigator.webdriver |
Rilevamento automazione | Sì |
navigator.plugins |
Plugin installati | Limitato |
navigator.mimeTypes |
Supporto MIME | Limitato |
navigator.cookieEnabled |
Stato cookie | Sì |
navigator.doNotTrack |
Preferenza privacy | Sì |
navigator.pdfViewerEnabled |
Supporto PDF | Sì |
Screen API
| Proprietà | Informazioni Rivelate | Falsificabile tramite JS |
|---|---|---|
screen.width |
Risoluzione schermo | Sì |
screen.height |
Risoluzione schermo | Sì |
screen.availWidth |
Larghezza disponibile | Sì |
screen.availTop |
Posizione finestra | Sì |
screen.colorDepth |
Profondità colore | Sì |
screen.pixelDepth |
Profondità pixel | Sì |
screen.orientation |
Orientamento | Sì |
Altre API
| API | Informazioni Rivelate | Falsificabile tramite JS |
|---|---|---|
Intl.DateTimeFormat().resolvedOptions().timeZone |
Fuso orario | Sì |
performance.now() |
Precisione timer | Sì (ridotta) |
Date.now() |
Clock skew | Sì |
navigator.connection |
Tipo di rete/RTT | Sì |
navigator.getBattery() |
Livello batteria | Sì |
navigator.mediaDevices |
Numero fotocamere/microfoni | Sì |
Strategia di Spoofing
Tramite JS Iniettato
// Sovrascrivi proprietà navigator tramite Object.defineProperty
Object.defineProperty(navigator, 'userAgent', {
get: () => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'
})
Object.defineProperty(navigator, 'platform', {
get: () => 'Win32'
})
Object.defineProperty(navigator, 'hardwareConcurrency', {
get: () => 8
})
Sfide
-
Temporizzazione: Lo script iniettato deve essere eseguito prima degli script della pagina. Richiede iniezione all'inizio di
<head>.
Framework: Alcuni framework (Next.js, Angular) usano SSR o script inline che vengono eseguiti prima del JS iniettato.
Service Workers: I SW possono intercettare e modificare le risposte prima dell'iniezione.
-
Rilevamento: Un sito può rilevare gli override verificando
Object.getOwnPropertyDescriptor()o confrontando più segnali per incongruenze.
Conclusioni
- ~25 segnali API JS sono falsificabili tramite iniezione JS del proxy
- Richiede un'iniezione accurata nella fase di parsing HTML
- La temporizzazione è critica (inietta prima di qualsiasi script della pagina)
- Non può sovrascrivere tutte le API (alcune sono supportate da C++ nel browser)
- Deve mantenere coerenza tra segnali (es. piattaforma Win32 + User-Agent Windows)