WebGL-Renderer-Strings und Hardware-Signale: Wie viel Ihre GPU über Sie verrät

Die Hardware, auf der ein Browser läuft, sickert auf mehreren kleinen Wegen in die Seite. Keiner nennt den Rechner beim Namen, aber zusammen beschreiben sie ihn genau genug, um ihn von den meisten anderen zu unterscheiden.
Der Renderer-String
WebGL stellt eine Erweiterung namens WEBGL_debug_renderer_info mit zwei Werten bereit: dem unmaskierten Hersteller und dem unmaskierten Renderer. Unter Windows mit Chromium lautet der Renderer typischerweise etwa ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 SUPER (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11). Diese eine Zeile nennt den GPU-Hersteller, das genaue Modell, seine PCI-Geräte-ID, die Grafik-API und das Shader-Modell, was zugleich ein starker Hinweis auf das Betriebssystem ist, weil diese Zeichenkette nur unter Windows existiert.
Firefox und Safari haben diesen String zeitweise maskiert oder verallgemeinert; Chromium gibt ihn preis. Ein Browser, der ihn maskiert, liefert einen generischen Wert, und eine Diagnose zeigt „Renderer-Info maskiert“, statt zu raten.
Anzahlen und Größen
navigator.hardwareConcurrency liefert die Anzahl der logischen CPU-Threads. navigator.deviceMemory liefert eine ungefähre Arbeitsspeichermenge, gerundet auf wenige Werte und in Chromium bei 8 gedeckelt, sodass ein Rechner mit 32 GB 8 meldet. screen.width und screen.height geben die Displaygröße an, availWidth und availHeight ziehen die Taskleiste ab, und devicePixelRatio verrät die Skalierung. screen.colorDepth ist fast immer 24. navigator.maxTouchPoints trennt Touch-Geräte vom Rest.
Einige davon haben für ihr harmloses Aussehen eine ungewöhnlich hohe Identifikationskraft. Die Thread-Anzahl hat nur eine Handvoll gängiger Werte, ist aber eines der Felder, die ein bekannter kommerzieller Fingerprinting-Dienst stark gewichtet, gerade weil es günstig und stabil ist. Die Bildschirmgröße in Verbindung mit Pixelverhältnis und verfügbarer Höhe grenzt einen Rechner stärker ein als ein User-Agent.
Mediengeräte
navigator.mediaDevices.enumerateDevices() liefert die Kameras, Mikrofone und Lautsprecher des Systems. Ohne Berechtigung geben moderne Browser die Arten und Anzahlen zurück, aber leere Bezeichnungen, sodass eine Seite „eine Kamera, ein Mikrofon, ein Ausgang“ erfährt und sonst nichts. Wird einer Website Zugriff gewährt, zeigen sich die Bezeichnungen. Eine Diagnose, die nur Anzahlen zeigt, verhält sich wie eine Seite ohne Berechtigung.
Noch einmal der Konsistenz-Aspekt
Bei Hardware-Signalen geht Spoofing am häufigsten schief. Ein Profil, das ein MacBook mit einem NVIDIA-Direct3D-Renderer, 24 Threads und einem 1366×768-Bildschirm behauptet, beschreibt einen Rechner, den es nicht gibt. Websites brauchen dafür keine Datenbank; ein paar Regeln fangen es ab. Wenn ein Profil einen dieser Werte ändert, muss es alle auf eine Kombination ändern, mit der ein echtes Gerät tatsächlich ausgeliefert wird, und sie über Besuche hinweg beibehalten.
Was Sie prüfen sollten
Lesen Sie den Renderer-String und fragen Sie, ob er zum Betriebssystem im User-Agent passt. Lesen Sie die Bildschirmgröße und fragen Sie, ob sie zu Pixelverhältnis und verfügbarer Höhe passt. Lesen Sie Thread-Anzahl und Speicher und fragen Sie, ob das Paar für diese GPU plausibel ist. Eine Diagnose legt diese Werte genau dafür nebeneinander; das Urteil liegt bei Ihnen.


