Font-Fingerprinting, Behavioral Profiling – und warum „nur ein Script“ nie nur ein Script ist
Eine Beobachtung, die nachdenklich macht
Neulich besuchte ich einen Freund zu seinem Geburtstag. Sein Notebook stand geöffnet da. Nicht aus Neugier, aber im Vorbeigehen fiel mir eine Onlineshopping-Seite auf: bunt, mit LED-Himmel-Lampen, Accessoires und Produktbilder, die eindeutig auf eine ganz bestimmte Ästhetik zugeschnitten waren. Nichts Schlimmes, nichts Anstößiges. Doch ich wusste: Mein Freund hat ganz klare Vorlieben und die Seite, die da aufgerufen war, spiegelte sie wider, ohne dass er je danach gesucht hatte.
War das Zufall?
Oder ein Beispiel dafür, wie modernes Behavioral Profiling längst jenseits von Cookies arbeitet, still, unauffällig, und oft unerkannt?
Font-Fingerprinting: mehr als nur Schrift
Beginnen wir einen Schritt früher, bei etwas, das viele für rein kosmetisch halten: Webfonts.
Ein häufiges Missverständnis lautet: „Extern geladene Fonts ermöglichen Font-Fingerprinting.“
Das ist so nicht korrekt, oder zumindest unvollständig.
Tatsächlich: Ein externer Webfont allein, passiv eingebunden, liefert keine Entropie. Er ist für alle Nutzer identisch und reduziert sogar Rendering-Unterschiede, er vereinheitlicht, statt zu differenzieren.
Problematisch wird es erst, wenn dieser Font in einen aktiven Messkontext eingebettet wird.
Dann nämlich kann ein Skript prüfen:
- Welche systemeigenen Fonts sind verfügbar?
- Wie verhält sich das Text-Rendering bei bestimmten Glyphen?
- Wie schnell wird ein Font geladen – und mit welchen Timing-Anomalien?
- Wie reagiert der Browser auf nicht-existente Fonts im Fallback?
Diese Messungen – etwa über <canvas>, SVG oder getComputedStyle() – erzeugen eine Kombination aus Rendering-Merkmalen, die stark vom Betriebssystem, der Grafikkarte, der Subpixel-Rendering-Engine (DirectWrite, Core Text, FreeType) und sogar von installierten Sprachpaketen abhängen.
Das Ergebnis?
Ein stabiler Fingerprint, der kombiniert mit anderen Signalen zur nahezu eindeutigen Identifizierung taugt.
Studien wie Panopticlick (EFF) und AmIUnique zeigen: Bereits 10–15 gut gewählte Attribute identifizieren >90 % der Nutzer. Mit 50+ liegt die Einzigartigkeit bei praktisch 100 %.
Die unsichtbare Kette: Warum „ein Script“ nie genug ist
Und jetzt kommt der entscheidende Punkt, einer, den nur jene erkennen, die den Netzwerkverkehr wirklich beobachten.
Viele Entwickler binden ein externes Skript ein, etwa für eine Karte, ein CAPTCHA oder ein interaktives Element – und glauben: „Das ist alles, was geladen wird.“
Doch in Wirklichkeit ist dieses eine Skript oft nur ein Bootstrap-Loader. Es lädt dynamisch Dutzende weitere Module nach, von unterschiedlichen Domains, mit kryptischen Namen, manchmal sogar verschleiert in Base64 oder WebAssembly.
Und: Nicht alle diese Module dienen der primären Funktion.
Einige enthalten:
- Client-Side Instrumentation (z. B. Leistungsmessung via performance.timing)
- Beacon-Aufrufe zu Logging-Endpoints (z. B. /gen_204)
- Canvas- oder WebGL-basierte Profiling-Routinen
- Session-Correlation-IDs, die über Domains hinweg verknüpft werden können
All das geschieht ohne Cookie, ohne Zustimmung, oft ohne sichtbaren Tracking-Code im Quelltext.
Und für den Seitenbetreiber?
Unsichtbar.
Denn: „Wir nutzen das doch nur für die Karte!“
Behavioral Profiling: Der Blick als Signal
Doch es geht noch weiter, bis in die Aufmerksamkeit selbst.
Moderne Tracking-Systeme messen nicht mehr nur was du tust, sondern wie du hinsiehst:
- Scroll-Tiefe und -Geschwindigkeit
- Mouse-Tracking (auch ohne Klick)
- Bild-spezifische Verweildauer via IntersectionObserver
- Tab-Fokus-Zeit (wie lange bleibt dein Browser-Reiter aktiv?)
So lässt sich ableiten: Welche Inhalte ziehen dich an? Welche ignorierst du?
Diese Daten fließen in Behavioral Graphs, Netzwerke, die Präferenzen, Emotionen, sogar Persönlichkeitsmerkmale inferieren.
Und dann passiert etwas Faszinierendes und Beunruhigendes zugleich:
Das Internet formt sich nach dir.
Nicht durch bewusste Auswahl, es geschied durch algorithmische Antizipation.
Genau das habe ich bei jener Shopping-Seite beim Freund gesehen.
Kein Zufall, sondern das Ergebnis eines Systems, das gelernt hat: „Dieser Nutzer bevorzugt diese Ästhetik.“
Und das, ohne dass er je danach gesucht hatte.
Was tun? Zwei Perspektiven, eine gemeinsame Verantwortung
Für Webseitenbetreiber: Architektur als Schutz
Wenn du eine Website betreibst, bestimmst du die Angriffsfläche. Deine Entscheidungen haben direkten Einfluss darauf, ob deine Besucher unfreiwillig zu Datenlieferanten werden.
- Lokal hosten, immer, wenn möglich
Fonts, Icons, Bibliotheken – alles, was nicht zwingend extern sein muss, gehört auf deinen eigenen Origin.
→ Kein Drittanbieter-Request = keine Korrelation, kein Side-Channel. - Content Security Policy (CSP) strikt setzen
Beispiel:
Content-Security-Policy: default-src ’self‘; font-src ’self‘; script-src ’self‘; img-src ’self‘ data:;
- Dadurch wird das Nachladen unbekannter Ressourcen effektiv blockiert.
- Kein Vertrauen ohne Verifikation
Scanne deine eigenen Seiten. Nutze:- Browser DevTools (Network-Tab)
- Burp Suite / OWASP ZAP für tiefere Analyse
- PrivacyScore oder webbkoll.eff.org für automatisierte Prüfung
- unser selbst entwickeltes Ressourcen-Prometheus
Und frage dich stets: „Weiß ich wirklich, was hier geladen wird, oder vertraue ich einem Drittanbieter?“
Für Besucher (Klienten): Schutz durch bewusste Werkzeuge
Als Nutzer hast du zwar weniger Kontrolle, aber nicht keine. Die folgenden Maßnahmen reduzieren deine Angreifbarkeit signifikant:
- Browser mit Fingerprinting-Schutz nutzen
- Tor Browser: Goldstandard, blockiert fast alle aktiven und passiven Fingerprinting-Methoden. Wird leider auch oft von Kriminellen verwendet und rückt dich, bei pauschaler Betrachtung, auch in diese Richtung. Die Behörden sehen nur: „Ah, der hat etwas zu verbergen …“ Tatsächlich willst du nur die Hoheit über deine eigenen Daten behalten.
- Firefox: Mit privacy.resistFingerprinting=true und privacy.trackingprotection.enabled=true
- Brave: Bietet „Fingerprinting-Blocking“ (Standard: „Block cross-site“; besser: „Block all“)
- JavaScript restriktiv handhaben
Nutze NoScript (Firefox) oder uMatrix (fortgeführt als „uBlock Origin – advanced mode“), um Skripte selektiv zu erlauben.
→ Viele Fingerprinting-Techniken (Canvas, AudioContext, Timing) benötigen JS. - Browser-Profile trennen
- Ein Profil für Banking/Behörden (JS deaktiviert, keine Add-ons)
- Ein Profil für Shopping/Soziales (mit Trackerblocker)
→ Verhindert Cross-Site-Profiling.
- Keine Illusion von „vollständigem Schutz“
Selbst Tor ist nicht unsichtbar, aber es erhöht die Kosten der Identifikation so stark, dass du für Massen-Tracking unwirtschaftlich wirst.
→ Das ist das realistische Ziel: nicht unsichtbar sein, sondern zu teuer.


