Übersicht
Browser-JavaScript-APIs geben eine breite Palette von System- und Browserinformationen preis. Diese Signale können via JS-Injection auf Proxy-Ebene abgefangen und modifiziert werden.
API-Vektoren
Navigator API
| Eigenschaft | Preisgegebene Info | Spoofbar per JS |
|---|---|---|
navigator.userAgent |
Browser/OS-String | Ja |
navigator.platform |
OS-Plattform | Ja |
navigator.language |
Primäre Sprache | Ja |
navigator.languages |
Spracheinstellungen | Ja |
navigator.hardwareConcurrency |
CPU-Kernanzahl | Ja |
navigator.deviceMemory |
RAM in GB | Ja |
navigator.maxTouchPoints |
Touch-Unterstützung | Ja |
navigator.webdriver |
Automatisierungserkennung | Ja |
navigator.plugins |
Installierte Plugins | Eingeschränkt |
navigator.mimeTypes |
MIME-Unterstützung | Eingeschränkt |
navigator.cookieEnabled |
Cookie-Status | Ja |
navigator.doNotTrack |
Datenschutzeinstellung | Ja |
navigator.pdfViewerEnabled |
PDF-Unterstützung | Ja |
Screen API
| Eigenschaft | Preisgegebene Info | Spoofbar per JS |
|---|---|---|
screen.width |
Bildschirmauflösung | Ja |
screen.height |
Bildschirmauflösung | Ja |
screen.availWidth |
Verfügbare Breite | Ja |
screen.availTop |
Fensterposition | Ja |
screen.colorDepth |
Farbtiefe | Ja |
screen.pixelDepth |
Pixeltiefe | Ja |
screen.orientation |
Ausrichtung | Ja |
Andere APIs
| API | Preisgegebene Info | Spoofbar per JS |
|---|---|---|
Intl.DateTimeFormat().resolvedOptions().timeZone |
Zeitzone | Ja |
performance.now() |
Timer-Präzision | Ja (reduziert) |
Date.now() |
Clock Skew | Ja |
navigator.connection |
Netzwerktyp/RTT | Ja |
navigator.getBattery() |
Akkustand | Ja |
navigator.mediaDevices |
Kamera/Mikrofon-Anzahl | Ja |
Spoofing-Strategie
Per injiziertem JS
// Navigator-Eigenschaften via Object.defineProperty überschreiben
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
})
Herausforderungen
-
Timing: Das injizierte Skript muss vor den eigenen Skripten der Seite ausgeführt werden. Erfordert Injektion ganz am Anfang von
<head>.
Frameworks: Manche Frameworks (Next.js, Angular) verwenden SSR oder Inline-Skripte, die vor dem injizierten JS ausgeführt werden.
Service Workers: SWs können Antworten abfangen und modifizieren, bevor die Injektion stattfindet.
-
Erkennung: Eine Website kann Überschreibungen erkennen, indem sie
Object.getOwnPropertyDescriptor()prüft oder mehrere Signale auf Inkonsistenzen vergleicht.
Schlussfolgerungen
- ~25 JS-API-Signale sind per Proxy-JS-Injection spoofbar
- Erfordert sorgfältige Injektion während der HTML-Parse-Phase
- Timing ist kritisch (Injektion vor jedem Seiten-Skript)
- Nicht alle APIs können überschrieben werden (manche sind C++-basiert im Browser)
- Signalübergreifende Konsistenz muss gewahrt werden (z. B. Win32-Plattform + Windows-User-Agent)