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.comdurchlassen 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