Was ist das?

Ein durchgängiges System für QR-Codes und Kurzlinks. Von der Erzeugung im Browser bis zur sicheren Weiterleitung auf dem eigenen Server. Statt auf externe Dienste wie Bitly zu setzen, habe ich die gesamte Kette selbst gebaut: einen QR-Code Generator als statische Seite, einen Redirect-Microservice unter go.mathis-adler.dev mit Preview-Seite und Domain-Allowlist, und ein CLI-Tool zur Link-Verwaltung.

Der Hintergrund: Öffentliche URL-Shortener tracken Klicks, können abgeschaltet werden und sind ein Sicherheitsrisiko. Warum genau, erkläre ich im Blog.

Wie es zusammenspielt

  • QR-Generator: (mathis-adler.dev/qr-generator) URL eingeben, QR-Code erzeugen, als SVG oder PNG herunterladen. Läuft komplett im Browser, keine Daten verlassen den Rechner.
  • Redirect-Service: (go.mathis-adler.dev) Node.js-Microservice in Docker. Jeder Kurzlink zeigt erst eine Preview-Seite mit Countdown, bevor der eigentliche 302-Redirect erfolgt. Nutzer sehen immer, wohin sie weitergeleitet werden.
  • CLI-Tool: Links werden ausschließlich per Kommandozeile mit API-Key erstellt. Kein öffentliches Interface, kein Missbrauchspotenzial.

Sicherheitsentscheidungen

  • Domain-Allowlist statt Open Redirect — nur Weiterleitungen zu vordefinierten Domains, mit Exact-Match (kein endsWith, das evilgithub.com durchlassen würde)
  • 12-Zeichen Base62 Tokens (~71 Bit Entropie ) — zu lang zum Erraten, aber kurz genug für QR-Codes
  • Kein Tracking, keine IP-Adressen, kein User-Agent, keine Cookies.
  • Zweistufiges Rate Limiting (Nginx + Express) — verschärft für 404-Antworten als Schutz gegen Token-Enumeration
  • API nur über VPN erreichbar: Nginx beschränkt /api/-Routen auf das interne Netzwerk

Was ich gelernt habe

  • Die Entscheidung, keinen öffentlichen Shortener zu bauen, hat die Architektur radikal vereinfacht und die Angriffsfläche auf fast null reduziert
  • Preview-Seiten vor Redirects sind ein minimaler Aufwand mit großem Sicherheitsgewinn

Glossar

Open Redirect
Eine Sicherheitslücke, bei der ein Server eingehende Anfragen ohne Einschränkung an beliebige externe URLs weiterleitet. Angreifer nutzen dies, um Phishing-Links hinter vertrauenswürdigen Domains zu verstecken.
Domain-Allowlist
Eine explizite Liste erlaubter Ziel-Domains für Weiterleitungen. Verhindert Open Redirects, indem nur Kurzlinks zu vordefinierten, vertrauenswürdigen Domains erstellt werden können.
Base62
Ein Kodierungsverfahren, das Zahlen mit 62 Zeichen (a–z, A–Z, 0–9) darstellt. Wird häufig für URL-Tokens verwendet, da es kompakte, URL-sichere Zeichenketten erzeugt.
Entropie (Bit)
Ein Maß für die Zufälligkeit eines Tokens. 71 Bit Entropie bedeutet 271 mögliche Kombinationen — rund 2,4 Trilliarden. Je höher die Entropie, desto schwerer ist ein Token zu erraten.
Rate Limiting
Ein Schutzmechanismus, der die Anzahl der Anfragen pro Zeiteinheit begrenzt. Verhindert Brute-Force-Angriffe und Token-Enumeration durch automatisierte Abfragen.
Token-Enumeration
Ein Angriff, bei dem systematisch alle möglichen Token-Kombinationen durchprobiert werden, um gültige Kurzlinks zu finden. Kurze Tokens und fehlendes Rate Limiting machen diesen Angriff praktikabel.
302 Found
Ein HTTP-Statuscode für temporäre Weiterleitungen. Im Gegensatz zu 301 (permanent) wird die Ziel-URL nicht vom Browser gecacht, sodass Änderungen am Redirect-Ziel sofort wirksam werden.