
Browser-Privatsphäre-Leck-Detektor — acht Erkennungsmodule, Risikobewertung und Pro-Konto-Verlauf, alles in Ihrem Browser.
Browser-Datenschutzleck-Detektor — acht Erkennungsmodule, Risikobewertung und Kontoverlauf, alles in Ihrem Browser.
Erstellt mit Verdent — einem agentischen Programmierassistenten. Jedes Erkennungsmodul, das Analyse-Dashboard, der API-Key-Authentifizierungsablauf, die zweisprachige Benutzeroberfläche und das Kubernetes-bereite Docker-Image wurden in Pair-Programming-Sitzungen mit Verdent entworfen und implementiert.
Öffnen Sie eine URL, klicken Sie auf Alle ausführen, und innerhalb weniger Sekunden zeigt Leakish,
was Ihr Browser über Sie und Ihr Netzwerk preisgibt – über WebRTC, Fingerprinting-APIs, DNS und
eine serverseitige Prüfung. Acht unabhängige Module erzeugen jeweils ein typisiertes Ergebnis +
Risikosignale, eine aggregierte Bewertung (0–100) und eine Stufe (safe / warning / critical).
Angemeldete Benutzer können Scans in MySQL speichern, den Verlauf durchsuchen und ein Analyse-Dashboard
öffnen, das Verteilungsdiagramme, Fingerabdruck-Hash-Wiederholungen, eine IP-/ASN-Zeitlinie,
Ausreißer-Scans und einen paarweisen Vergleich anzeigt. Alles andere (der Detektor selbst) funktioniert
ohne Konto – jeder kann auf /app landen und einen Scan durchführen.
Jedes Modul wird über eine einzige typisierte DetectionModule<T>-Schnittstelle registriert und läuft isoliert – ein Modul, das eine Ausnahme auslöst, beeinträchtigt nicht die anderen. Der Aktivierungsstatus pro Modul wird in localStorage mit einem Versionsschlüssel gespeichert, überlebt Aktualisierungen, und die Schaltfläche Alle ausführen durchläuft nur die aktivierte Menge.
/api/detect/network zugreift, um seine eigene vom Server beobachtete IP zu lesen, oder (c) das DNS-Modul mit https://dns.google/resolve kommuniziert.leakish.locale-Cookie gespeichert, steuert <html lang>, Seitenmetadaten, jeden Bildschirm, jede API-Fehlerantwort und die Magic-Link-Anmelde-E-Mail.det_…-API-Schlüssel erstellen (SHA-256 gespeichert, einmal im Klartext angezeigt). Jeder /api/detect/*-Endpunkt akzeptiert entweder ein Session-Cookie oder einen Bearer-Key, sodass derselbe Scan von einem CLI/CI-Job aus gespeichert werden kann./scans/analytics — Verteilungsdiagramme nach Zeitzone/Plattform/Sprache/Bildschirm/WebGL/ASN/Land/Schriftanzahl, Fingerabdruck-Hash-Wiederholung mit einer risikoabhängigen Bewertung pro Art, IP-/ASN-Zeitlinie, mehrdimensionaler Ausreißer-Detektor, paarweiser Vergleich mit einem Ähnlichkeitswert von 0–100.Voraussetzungen: Node 22+ (alles ab 20+ funktioniert für die lokale Entwicklung), Yarn 1.x, eine laufende MySQL-Instanz und (optional) ein Google OAuth-Client.
yarn install
cp env.example .env.local # Füllen Sie mindestens DATABASE_URL, NEXTAUTH_SECRET und IP_HASH_SALT aus
yarn prisma:generate
yarn db:push # Tabellen in einer frischen DB anlegen
yarn dev # http://localhost:3000
Mindestumgebung für eine funktionierende Anmeldung:
DATABASE_URL — z.B. mysql://root:[email protected]:3306/detectNEXTAUTH_SECRET — openssl rand -base64 32NEXTAUTH_URL — http://localhost:3000 in der EntwicklungIP_HASH_SALT — openssl rand -base64 32Optional:
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET für die Google-AnmeldungMAILGUN_API_KEY / MAILGUN_DOMAIN / EMAIL_FROM für den echten Magic-Link-Versand (ohne diese wird der Link in der Entwicklung in der Serverkonsole ausgegeben)IPINFO_TOKEN zur Anreicherung der Netzwerkprüfung mit ASN / VPN / Proxy-DatenDie vollständige kommentierte Liste finden Sie in env.example.
app/
├── (marketing)/ # / — Landing (server-resolved auth state + client UI)
├── app/ # /app — the detector page
├── login/ # /login
├── scans/ # /scans, /scans/[id], /scans/analytics
├── integrations/ # /integrations — API key management
├── api/
│ ├── auth/ # NextAuth route + apiKey-login + tests
│ ├── detect/
│ │ ├── analytics/ # aggregate + pairwise-diff
│ │ ├── network/ # server-side egress probe
│ │ ├── scans/ # save / list / get / delete
│ │ └── uniqueness/ # how many users share this fingerprint hash
│ ├── integration/keys # create / revoke / list API keys
│ └── health/ # liveness probe for k8s
├── opengraph-image.tsx # dynamic OG (per-locale)
├── apple-icon.tsx # dynamic apple-touch icon
├── icon.svg # shield gradient
└── layout.tsx # metadata + theme-init script + LocaleProvider
components/
├── modular-detector.tsx # top-level shell (header + module list + result/overview)
├── detector/ # module-list, result-panel, category filter, state hook
├── result-details/ # one detail view per module (typed switch)
├── overview/ # overview panel + diagnostics export
├── auth/ # AuthGateProvider, login dialog, login form
├── providers/ # SessionProvider wrapper
└── ui/ # shadcn-style primitives + theme/locale toggles
lib/
├── detection-modules/ # 8 module impls + ModuleManager + IP utils + tests
├── risk/ # assess.ts — RiskSignal/score aggregation
├── i18n/ # en.ts / zh.ts + Messages type + locale client/server
├── api/ # withDetectAuth wrapper, scan-payload Zod schema
├── client/ # browser-side scan-api (extractFingerprintInputs, saveScan, lookupUniqueness)
├── server/ # network-probe, IP-hash salt, fingerprint hashing, rate-limit, send-email, analytics
├── persistence/ # SSR-safe localStorage wrappers
├── env.ts # runtime env validation
├── logger.ts # dev-only diagnostic logger
└── prisma.ts # singleton client targeted at .prisma/detect-client
prisma/schema.prisma # User / Account / Session / DetectScan / ApiKey / DetectFingerprintHash
/app auf Alle ausführen. Der Detektor durchläuft aktivierte Module über ModuleManager.runAllEnabledModules – Fehler eines Moduls werden abgefangen und isoliert, sodass andere Ergebnisse trotzdem angezeigt werden.DetectionResult<T> zurück (mit success | failure-Tag und modulspezifischen data). Das Ergebnisfeld rendert eine pro-Modul-Detailkomponente über einen typsicheren switch.lib/risk/assess.ts durchläuft jedes Ergebnis, gibt RiskSignals mit stabilen IDs aus und erzeugt eine OverallAssessment (Punktzahl + Stufe + Zählungen).POST an /api/detect/scans. Der Server validiert mit Zod, führt seine eigene Netzwerkprüfung durch, um die vom Server beobachtete IP / ASN / VPN-Flags aufzuzeichnen, und schreibt eine -Zeile sowie -Zeilen.Unit-Tests befinden sich neben ihren Testobjekten in __tests__/-Verzeichnissen:
yarn test # gesamte Suite
yarn test path/to/file # einzelne Datei
yarn test -t "name pattern" # nach Test-Namen (Regex)
Highlights:
lib/detection-modules/__tests__/ – IP-Klassifizierung + mDNS-Extraktion,
Modul-Manager-Registrierung und Fehlerisolation, gemockte RTCPeerConnection
für das WebRTC-Modul, jsdom-Shape-Tests für das Browser-Fingerabdruck-Modul,
CDP/Automatisierungs-Signalerzeugung.lib/server/__tests__/analytics.test.ts – Verteilungs-Bucketing, Wiederholungs-
Gruppierung, Ausreißer-Bewertung, paarweise Ähnlichkeitsberechnung.app/api/detect/scans/__tests__ – POST speichern (Validierung, Rate-Limit,
Idempotenz, Bereinigung) + GET-Liste + DELETE einzeln.app/api/integration/keys/__tests__ – erstellen / widerrufen / auflisten mit
Modus-Einschränkung (API-Key-Sitzungen können keine anderen API-Keys erstellen).app/api/auth/__tests__ – apiKey-Login-Route (CSRF, Formatprüfung, widerrufene/
abgelaufene Behandlung, letzte-Nutzung-Aktualisierung).Lint + Typenprüfung:
yarn lint
npx tsc --noEmit
Das enthaltene Dockerfile erzeugt ein Next.js-Standalone-Image auf
node:22-alpine. Produktionsumgebungsvariablen werden über Kubernetes Secrets
injiziert – Platzhalterwerte werden zur Build-Zeit eingebrannt, sodass
SKIP_ENV_VALIDATION zur Laufzeit nicht erforderlich ist. Ein prisma db push-Job
führt das Schema vor dem Rollout aus. Die vollständige Image-Build → Migration →
Rollout-Pipeline finden Sie in .github/workflows/deploy-tke.yml.
Dieser Open-Source-Build hat keine Bezahlschranke. Speicherungen unterliegen
ausschließlich dem prozessinternen benutzerbezogenen Ratenbegrenzer in
lib/server/rate-limit.ts (10 Speicherungen/Stunde), und die Aufbewahrung des
Verlaufs ist unbegrenzt.
Siehe LICENSE.
| ID | Modul | Untersuchte Aspekte |
|---|
network-probe | Netzwerk-Ausgangsprüfung | Vom Server beobachtete öffentliche IP, ASN, Land/Region/Stadt, VPN/Proxy/Tor/Hosting-Flags, TLS/HTTP |
webrtc | WebRTC | Öffentliche IPv4 + IPv6 via STUN, RFC1918-Lecks, mDNS-verschleierte .local-Kandidaten |
browser-fingerprint | Browser-Fingerabdruck | UA, Bildschirm, Zeitzone, Plugins, CPU-Kerne, Gerätespeicher, Sprachliste, DNT, Cookies |
canvas-fingerprint | Canvas / WebGL | 2D + WebGL Renderer-/Anbieter-Strings, Textdarstellungs-Eigenarten, unterstützte Bildformate |
audio-fingerprint | Audio | AudioContext-Abtastrate, Kanäle, Latenz, Oszillator-Ausgabe-Hash |
font-detection | Schriftarten | 40+ benannte Schriftarten-Prüfungen via Canvas-Breitendifferenz-Erkennung |
dns | DNS | DoH-Erreichbarkeit, DNSSEC-Signal, Resolver-Geolokalisierung, DNS-Leck-Heuristik |
cdp-detection | Automatisierung / Headless | navigator.webdriver, CDP-Timing, Chromium-spezifische API-Oberfläche, Port-Prüfungen — Konfidenz 0–1 |
lib/risk/assess.tsRiskSignalwebrtc.public-ip-leakMessagesPOST /api/detect/scans akzeptiert einen Idempotency-Key-Header, begrenzt jeden Benutzer auf 200 Scans und beschränkt Speicherungen auf 10/Stunde.node:22-alpine, Next.js Standalone-Ausgabe, Bereitstellung auf Kubernetes über den Workflow unter .github/workflows/.| Pfad | Zweck |
|---|
/ | Marketing-Landingpage (Aurora-Hero, Feature-Karten, FAQ, CTA) |
/app | Der Detektor — Modulliste + Ergebnisfeld + Übersicht |
/login | Eigenständige Anmeldeseite (Google / E-Mail / API-Key) |
/scans | Verlauf gespeicherter Scans des angemeldeten Benutzers |
/scans/[id] | Einzelansicht eines gespeicherten Scans |
/scans/analytics | Verteilung / Wiederholung / Zeitlinie / Ausreißer / Vergleich |
/integrations | Verwaltung der det_…-API-Schlüssel (erstellen / widerrufen / Anleitung) |
DetectScanDetectFingerprintHash/scans/[id] sichtbar, fließt in die Analyse-Aggregate ein und zählt bei der Eindeutigkeitsabfrage.| Schicht | Bestandteile |
|---|
| Framework | Next.js 14 (App Router, force-dynamic überall), React 18 |
| Sprache | TypeScript 5, Strict-Mode |
| UI | Tailwind CSS 3, shadcn/ui Primitive auf Radix, Lucide Icons, Framer Motion |
| Authentifizierung | NextAuth 4 (Google OAuth + Magic-Link-E-Mail) + Prisma-Adapter |
| Daten | Prisma 6 → MySQL (benutzerdefinierte Client-Ausgabe unter .prisma/detect-client) |
| Validierung | Zod |
| Tests | Jest 29 + ts-jest + jsdom |
| Build / Deployment | Multi-Stage-Dockerfile, Next.js Standalone, Kubernetes-Manifeste |