Sicherheit

Unser Sicherheitsmodell in einem Satz: Es gibt nichts auf einem Server, das angegriffen werden könnte. Alles Folgende ist über Ihre DevTools nachprüfbar.

Architektur

Der Generator ist eine statische Single-Page-Anwendung, die von Cloudflare Pages bereitgestellt wird: keine Benutzerkonten, keine Authentifizierung und kein Backend-Code-Pfad irgendwo im Generierungsablauf. Jede QR-Generierungs-, Kodierungs-, Scan- und Rendering-Operation läuft vollständig in Ihrem Browser. Ein kleiner serverloser Endpunkt steht daneben und wird hier genannt statt versteckt: /api/contact (das Kontaktformular, das speichert, was Sie einreichen, in Cloudflare D1, und es uns per E-Mail sendet). Er wird nicht aufgerufen, während Sie einen QR-Code erstellen; die URL-Sicherheitsprüfung ist ein separates Produkt unter check.qr.abundera.ai. QR-Code auf Sicherheit prüfen

Bedrohungsmodell

Da der Generator keine Benutzerdaten erfasst, speichert oder überträgt (die beiden Endpunkte oben verarbeiten nur, was Sie ihnen ausdrücklich schicken), gelten die häufigsten Web-App-Bedrohungen — Credential-Diebstahl, Datenbankeinbruch, Session-Hijacking, serverseitige Injection — für ihn nicht. Die verbleibende Angriffsfläche ist das statische Asset-Bundle (HTML, CSS, JavaScript), das von unserem Ursprung bereitgestellt wird. Wir entwickeln unter der Annahme:

Content Security Policy — nach Direktive

Die untenstehende Richtlinie wird beim Build dieser Seite aus der ausgelieferten _headers-Datei gelesen, sie kann also nicht von dem abweichen, was die Edge sendet. Prüfen Sie sie in den Antwort-Headern jeder Anfrage.

Content-Security-Policy:
  default-src 'self';
  script-src 'self' https://abundera.ai 'wasm-unsafe-eval' https://challenges.cloudflare.com;
  worker-src 'self' blob:;
  style-src 'self' 'unsafe-inline' https://abundera.ai;
  font-src 'self';
  img-src 'self' data: blob: https:;
  connect-src 'self' https: https://challenges.cloudflare.com;
  frame-src 'self' https://challenges.cloudflare.com;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

Was jede Direktive uns erlaubt zu tun und wo sie Kompromisse eingeht:

Was CSP nicht kann

CSP begrenzt, von wo der Browser Code lädt. Es prüft nicht, was geladener Code tut. Wäre unser Ursprung kompromittiert, der erste Punkt im Bedrohungsmodell, würde das Skript des Angreifers mit denselben Rechten laufen wie unseres, einschließlich der oben genannten connect-src- und img-src-Erlaubnisse. Unsere Verteidigung dagegen liegt vor CSP: Deployments laufen über ein einziges Cloudflare-Konto mit eingeschränkten Tokens, Asset-Dateinamen sind inhaltsbasiert gehasht, sodass eine ausgetauschte Datei jede URL ändert, die auf sie verweist, und der Service Worker cached nur same-origin GET-Antworten. Das Manifest beschreibt die Website, wie sie ausgeliefert wird. Es ist keine Behauptung, dass keine Webseite jemals irgendwo Daten senden könnte, und wir möchten lieber, dass Sie uns an der engeren, überprüfbaren Aussage messen.

Für /bio/* (gelockertes img-src für vom Benutzer bereitgestellte Avatare) und /embed/* (gelockertes frame-ancestors für absichtliches Einbetten) gelten andere CSP-Richtlinien. Beide sind in site/_headers dokumentiert.

Transport- und Framing-Header

Service Worker

Unser Service Worker (site/sw.js) cached nur same-origin Assets. Der fetch-Handler lehnt Cross-Origin-Anfragen und Nicht-GET-Methoden explizit ab — Sie können die Logik in /sw.js nachlesen (der Quelltext bleibt unminifiziert genug, um ihm zu folgen). Cache-Schreibvorgänge sind in event.waitUntil() eingebettet, damit sie nicht mitten in einer Navigation verworfen werden können.

Eingabe-Sanitisierung

Jeder Rendering-Pfad, der Benutzereingaben akzeptiert, behandelt sie als nicht vertrauenswürdigen Text:

Cross-Origin-Bildabruf

Wenn ein Benutzer eine https:-URL als vCard-Foto oder Logo einfügt, ruft der Browser sie gemäß CORS und der img-src-Allowlist unserer CSP ab. Das Bild wird in ein Canvas gerendert. Es wird nie zu aktivem DOM, wird nie als Code ausgeführt und erreicht nie unseren Ursprung — der Abruf erfolgt Browser → Remote-Bild, und das Ergebnis wird clientseitig gerendert. Ein Angreifer, der eine Remote-Bild-URL kontrolliert, kann nachverfolgen, dass die URL geladen wurde (eine Log-Zeile auf seinem eigenen Server), kann aber nichts von unserer Seite exfiltrieren.

Subresource Integrity (SRI)

Alles JavaScript und CSS, das wir ausliefern, ist same-origin. Wir laden keine Skripte oder Stylesheets von Drittanbietern, daher sind SRI-Hashes nicht anwendbar. Wenn wir jemals ein Drittanbieter-Asset laden, werden wir ein SRI-integrity-Attribut daran anbringen und den Hash-Aktualisierungsprozess auf dieser Seite dokumentieren.

Eine Schwachstelle melden

Wenn Sie ein Sicherheitsproblem entdecken, das Abundera QR betrifft — sei es in unserem Code, unserer Bereitstellung oder einer Abhängigkeit, die wir ausliefern — melden Sie es bitte vertraulich an security@abundera.ai. Wir streben eine Triage innerhalb von 72 Stunden an. Sie können uns auch über die Kontaktdaten in unserer /.well-known/security.txt-Datei erreichen.

Kein Bug-Bounty-Programm (noch nicht)

Wir bieten derzeit keine bezahlten Prämien an, aber jeder bestätigte gültige Bericht erhält eine Erwähnung im Changelog und unseren öffentlichen Dank.

Überprüfen Sie das oben Genannte

Jede Behauptung auf dieser Seite ist über die DevTools Ihres Browsers falsifizierbar, ohne uns vertrauen zu müssen:

Kontakt

Sicherheitsmeldungen: security@abundera.ai

Zuletzt aktualisiert: 2026-09-03. Nächste Überprüfung: 2026-12-03.