TL;DR: Öffne irgendeine Website, und dein Browser teilt sofort drei Ebenen an Daten: Netzwerkinformationen, HTTP-Header und dutzende Geräteeigenschaften, die per JavaScript lesbar sind — bevor es überhaupt einen Consent-Dialog gibt. In Kombination ergibt das einen Fingerprint, der dich ohne ein einziges Cookie mit über 90 Prozent Genauigkeit wiedererkennt. Ich habe ein Banner für diese Website gebaut, das jedem Besucher diese Daten live zeigt — lokal berechnet, nirgendwo gespeichert — und erklärt, warum ich als Sicherheitsexperte niemanden fingerprinten will.
Die Ausgangslage
Ich auditiere Websites beruflich — und ein Befund, für den ich fast nie einen Scanner brauche, ist der Besucher selbst. Die meisten Websites sammeln alles, was das Protokoll auf den Tisch legt, zucken mit den Schultern und nennen es „notwendig". Es ist notwendig. Und genau deshalb ist es gefährlich.
Also habe ich mir die unbequeme Frage gestellt, die ich sonst meinen Kunden stelle: Was gibt meine eigene Website über dich preis — sofort, bevor es irgendein Cookie-Banner gibt? Statt in einem Blogartikel mit vagen Prozenten zu antworten, habe ich beschlossen, es zu zeigen. Diese Website zeigt seit heute unter der Navigation ein Live-Banner, das die echten Browserdaten des Besuchers vor dessen Augen einliest — IP-Adresse, Header, GPU, Schriftarten, Canvas-Fingerprint — und dann erklärt, warum ich diese Daten nicht haben darf.
Das Muster
Dein Browser hält keine Geheimnisse. Jeder Seitenaufruf reicht dem Server drei Ebenen an Informationen, ohne dass auch nur eine Frage gestellt wird.
Ebene 1: Netzwerkinformationen (Protokollebene)
Diese Daten sind unvermeidbar — sie sind der Transport selbst:
- IP-Adresse — die eindeutige Adresse deines Anschlusses. Daraus lassen sich ungefährer Standort (Land, Region, meist Stadt) und Internetanbieter ableiten.
- Datum und Uhrzeit — der exakte Zeitstempel der Anfrage.
- Ziel-URL und Referrer — was du geöffnet hast und von wo du gekommen bist.
Ebene 2: Standard-HTTP-Header
Jede Anfrage trägt sie und beschreibt deine Konfiguration präzise:
- User-Agent — Browser, exakte Version, Betriebssystem, Geräteklasse.
- Accept-Language — deine Sprachpräferenzen und oft dein Standort.
- Accept / Accept-Encoding — unterstützte Formate und Kompressionsverfahren.
Ebene 3: Geräteeigenschaften & Client Hints (per JavaScript)
Sobald die Seite lädt, kann Skript dutzende Systemparameter lesen — mit oder ohne Cookies, mit oder ohne Einwilligung:
- Bildschirmauflösung und Farbtiefe, Fenstergröße, Pixel-Verhältnis
- Zeitzone, Sprachliste
- CPU-Kerne (
navigator.hardwareConcurrency), geschätzter Arbeitsspeicher (navigator.deviceMemory) - GPU und Renderer per WebGL (
WEBGL_debug_renderer_info) - installierte Schriftarten (über Canvas messbar)
- Akkustatus, Netzwerktyp (WLAN vs. Mobilfunk, Downlink, RTT)
- Canvas-Fingerprint, Touchpunkte, Plattform, Cookies erlaubt
Das Problem: Browser-Fingerprinting
Einzeln sind diese Werte langweilig. In Kombination sind sie eine Identität. Browserversion × Betriebssystem × Hardware × Auflösung × Zeitzone × Schriftarten ist so individuell, dass Tracking-Dienste Besucher mit über 90 Prozent Genauigkeit wiedererkennen — ohne Cookies, ohne Identifikatoren, ohne Einwilligung.
Was ich gebaut habe: ein Live-Transparenz-Banner
Das Banner unter der Navigation dieser Website zeigt genau das. Drei Bausteine:
1. Der Server-Echo (/api/client-info)
Eine winzige API-Route spiegelt das zurück, was die Anfrage ohnehin übertragen hat: IP, Geo-Header, User-Agent, Accept-Language, Referrer und Zeitstempel. Nichts wird geloggt, die Antwort ist no-store.
export async function GET(request: NextRequest) {
const h = request.headers;
const forwarded = h.get('x-forwarded-for');
const info = {
ip: forwarded ? forwarded.split(',')[0].trim() : h.get('x-real-ip'),
country: h.get('x-vercel-ip-country'),
city: decode(h.get('x-vercel-ip-city')),
userAgent: h.get('user-agent'),
acceptLanguage: h.get('accept-language'),
referer: h.get('referer'),
time: new Date().toISOString(),
};
return NextResponse.json(info, { headers: { 'Cache-Control': 'no-store' } });
}
2. Die Client-Erfassung
Ein kleines Skript — das weiterhin in deinem Browser läuft — sammelt, was JavaScript ohnehin lesen kann: Bildschirm, Zeitzone, Kerne, Arbeitsspeicher, WebGL-Renderer, Schrifterkennung über Canvas, Akku, Verbindungstyp, Touchpunkte, DNT-Flag. Zusätzlich wird ein Canvas-Fingerprint-Hash errechnet.
3. Der lokale Fingerprint
Alle Browser-Werte werden zu einem einzigen Hash kombiniert — lokal berechnet, im Panel angezeigt, niemals übertragen. Diese eine Zeile ist der Sinn der ganzen Übung: Ein Fingerprint ist keine Hypothese. Er ist zwanzig unscheinbare Werte, die du bei jedem Seitenaufruf produzierst — und ein Hash, den ein Tracker genauso berechnen würde.
Wo es aufhört
Das Banner ist ein Spiegel, kein Sammler:
- alles wird im Browser des Besuchers berechnet und angezeigt
- nichts wird gespeichert — keine Cookies, kein localStorage, keine Logs
- der einzige Serverkontakt ist der Echo von Daten, die der Browser ohnehin überträgt
- kein Fingerprint-Hash verlässt je die Seite
Zur Ehrlichkeit gehört: Diese Website nutzt Vercel Web Analytics — cookielose, anonyme Zähler, keine Wiedererkennung, kein Profil.
Reproduktion im Labor
Ich habe das Banner genauso verifiziert, wie ich Audit-Befunde verifiziere: Headless-Browser, frisches Profil, keine Interaktion. Das Panel füllte sich sofort mit echten Werten — Chrome-Version, macOS, Europe/Berlin, 10 Kerne, 32 GB RAM, ANGLE (Apple, ANGLE Metal Renderer: Apple M1 Max), 14 erkannte Schriftarten, ein Canvas-Hash, Akku voll geladen. Jeder Wert kam von genau der Maschine, die die Seite angefordert hat. Genau das ist der Punkt: Niemand brauchte dafür eine Erlaubnis.
Das Experiment dokumentiert auch seine eigenen Grenzen: Do Not Track ist standardmäßig nicht gesetzt, die Geo-Ebene ist nur so genau wie die Datenbank des Hosters, und Browser deaktivieren Teile der API-Oberfläche (etwa Arbeitsspeicher oder Akku) unterschiedlich.
Wie du dich schützt
| Maßnahme | Was sie zerstört |
|---|---|
| Brave / gehärteter Firefox (resist fingerprinting) | Gemeldete Canvas-/WebGL-Werte werden generisch |
| Canvas- und Font-Blocker (uBlock, CanvasBlocker) | Canvas-Hash und Schriftliste verlieren ihre Eindeutigkeit |
| VPN oder vertrauenswürdiger Residential-Proxy | Abgeleiteter Standort und ISP verschwinden |
| Zeitzone/Sprache spoofen | Eine weitere Entropiequelle fällt weg |
| Browser-Update | Altversions-Entropie verschwindet |
Was Betreiber besser machen können
- Nicht sammeln, was du nicht brauchst — Datenschutz beginnt mit Löschen.
- Keine Client Hints anfordern (
Accept-CH) — sie verwandeln Opt-in-Entropie in Standard-Übertragung. - Strikte
Referrer-Policyund kein Referrer-Leak an Dritte. - Consent zuerst, Tracking erst nach Opt-in — alles andere ist ein regulatorischer Unfall.
- Standardmäßig transparent sein: Wenn ein Besucher sehen kann, was eine Seite über ihn liest, hat die Seite schon die Wahrheit gesagt.
Das Fazit
Browser sind für Bequemlichkeit gebaut, nicht für Diskretion. Solange das so bleibt, wird Fingerprinting die Hintergrundstrahlung des Webs sein — und die beste Verteidigung ist kein weiteres Werkzeug, sondern Verständnis: was übertragen wird, was sich ableiten lässt und wer es kombinieren darf. Mein Banner macht das Unsichtbare lesbar.
Wenn du diese Website besuchst, kannst du es selbst sehen — direkt unter der Navigation.