Wie wir sichere Beta-Wartelisten auf Cloudflare erstellen
Tech
Cloudflare Workers
Beta Waitlist
Double Opt-In
Turnstile

Wie wir sichere Beta-Wartelisten auf Cloudflare erstellen

Eine praxisnahe Methode für produktionsreife Cloudflare-Beta-Wartelisten mit Double-Opt-in, Turnstile, gehashten Tokens, SMTP, Admin-Steuerung und Release-Gates.

Uygar DuzgunUUygar Duzgun
Jul 26, 2026
Aktualisiert 20. Aug. 2026
9 min read

Wie wir sichere Beta-Wartelisten auf Cloudflare erstellen

Eine Beta-Warteliste ist nur dann ein geschäftlicher Vorteil, wenn die Adressen echt sind.

Die meisten Teams beginnen mit einem E-Mail-Feld und einer Absenden-Schaltfläche. Für ein Landingpage-Experiment ist das in Ordnung. Sobald die Liste jedoch Launch-Pläne, Einladungswellen, Updates für Investoren oder Produktentscheidungen beeinflusst, reicht es nicht mehr aus. Wenn jeder die Adresse einer anderen Person eintragen kann oder ein Bot die Datenbank über Nacht füllt, erhält das Team verrauschte Nachfrage statt verwertbarer Signale.

Das ist die Methode, die ich für den Aufbau einer produktionsreifen Beta-Warteliste auf Cloudflare verwende: Double-Opt-in, serverseitige Bot-Prüfungen, kurzlebige Bestätigungslinks, gehashte Tokens, SMTP-Versand über bestehendes Mailhosting, Admin-Standards, die verifizierte und ältere Einträge trennen, sowie ein Release-Gate, das nicht so tut, als wäre konfigurierte Infrastruktur bereits live.

Eine kürzlich umgesetzte Beta-Warteliste hat diese Methode in einer realen Auslieferung bestätigt, ohne ein vollständiges Kontosystem zu erfordern. Der nützliche Teil ist die Struktur der Arbeit: eine kleine Anmeldeoberfläche mit klaren Grenzen bei Einwilligung, Missbrauch, Zustellung, Datenqualität und Deployment.

Das Geschäftsproblem, das eine sichere Warteliste löst

Eine Warteliste hat zwei Aufgaben.

Sie soll Nachfrage erfassen und dem Team helfen, auf diese Nachfrage zu reagieren. Genau an diesem zweiten Punkt versagen schwache Formulare.

Wenn du der Liste nicht vertrauen kannst, wird jede Nachverfolgung langsamer. Du fragst dich, wie viele Einträge von Bots oder Skripten stammen. Du zögerst, bevor du Einladungs-E-Mails versendest. Du exportierst Daten, bereinigst sie manuell und weißt trotzdem nicht, ob die Person die Adresse kontrolliert. Die Liste wird zu einer groben Eitelkeitsmetrik statt zu einem Werkzeug für den Release.

Eine sichere Beta-Warteliste liefert sauberere Eingaben:

weniger falsche Anmeldungen durch Bots oder Skripte
weniger Adressen, die ohne Einwilligung eingetragen wurden
bessere Belege dafür, dass eine Person den Posteingang kontrolliert
klarere Admin-Exporte für Launch und Outreach
weniger manuelle Bereinigung vor dem Versand von Beta-Einladungen
ein sichererer Deployment-Pfad, bevor öffentlicher Traffic eintrifft

Das Ziel ist nicht, ein einfaches Formular kompliziert zu machen. Das Ziel ist, dass das Formular tatsächlich das bedeutet, was das Unternehmen darunter versteht.

Die Cloudflare-Architektur

Der zentrale Stack ist bewusst klein.

Cloudflare Workers verarbeiten die Anfrage. Cloudflare Turnstile prüft, ob die Anmeldung menschlich wirkt. D1 speichert Wartelisteneinträge und ausstehende Bestätigungsdatensätze. Bestehendes SMTP/Mailhosting versendet die Bestätigungs-E-Mail über TLS. Ein geplanter Worker-Cleanup-Job entfernt abgelaufene ausstehende Datensätze.

Dieser Stack reicht für viele Teams in einer frühen Phase aus. Du musst kein vollständiges Benutzerkontosystem hinzufügen, nur um eine verantwortungsvoll aufgebaute Beta-Liste zu erfassen.

Der Ablauf sieht so aus:

Ein Besucher übermittelt über das Wartelistenformular eine E-Mail-Adresse.
Der Worker validiert Origin, Body-Größe, Honeypot, Rate Limits und Turnstile.
Der Worker erstellt eine ausstehende Bestätigung mit einer Gültigkeit von 24 Stunden.
Das rohe Token wird in den E-Mail-Link eingefügt, aber D1 speichert nur einen schlüsselbasierten Hash.
Der Benutzer öffnet den Link und bestätigt über einen Same-Origin-POST.
Der Worker verwendet das einmalige Token und schreibt den verifizierten Wartelisteneintrag.
Admin-Ansichten und CSV-Exporte zeigen standardmäßig verifizierte Adressen.

Damit erhalten Produktteams eine klare Trennung: Ausstehendes Interesse ist nicht dasselbe wie verifizierte Nachfrage.

Double-Opt-in ist eine Produktentscheidung

Double-Opt-in wird oft als E-Mail-Hygiene dargestellt. Ich sehe es als Produkthygiene.

Wenn eine Beta-Liste darüber entscheidet, wer zuerst Zugang erhält, sollte das Team wissen, dass jede Adresse zu jemandem gehört, der sie bestätigt hat. Ein Bestätigungsfenster von 24 Stunden reicht für eine normale Anmeldung aus und ist kurz genug, damit veraltete ausstehende Datensätze nicht dauerhaft bestehen bleiben.

Der Bestätigungslink sollte den Status nicht von selbst ändern. Link-Scanner, E-Mail-Vorschauen und versehentliche GET-Anfragen gibt es. Das sicherere Muster besteht darin, dass der Link eine Bestätigungsseite rendert und der Benutzer anschließend eine Schaltfläche drücken muss, die einen Same-Origin-POST absendet.

Dieser zusätzliche Klick ist geringfügig. Die Grenze ist nützlich.

Das macht auch den Support einfacher. Wenn jemand sagt, er habe sich nie angemeldet, kannst du auf einen Ablauf verweisen, der Zugriff auf den Posteingang und eine ausdrückliche Bestätigungsaktion erforderte, bevor die Adresse in die verifizierte Liste aufgenommen wurde.

Bot-Schutz ohne ein feindseliges Formular

Eine gute Warteliste sollte sich nicht wie eine Sicherheitsprüfung anfühlen.

Der Schutz sollte größtenteils hinter dem Formular liegen. In diesem Aufbau validiert der Worker serverseitig ein verwaltetes Cloudflare-Turnstile-Widget. Die Validierung prüft das Token, die erwartete Aktion und den erwarteten Hostnamen. Ein Browser-Widget ohne serverseitige Validierung ist nur Dekoration; der Worker muss es überprüfen.

Turnstile ist nur eine Ebene. Das Formular verwendet außerdem ein Honeypot-Feld zur kostengünstigen Bot-Erkennung, einen begrenzten Request-Body, damit übergroße Payloads keine Worker-Zeit verschwenden, ein schlüsselbasiertes IP-Rate-Limiting und ein schlüsselbasiertes Limit für Versuche pro Adresse.

Das Limit pro Adresse ist wichtig, weil die E-Mail-Verifizierung zu einer Belästigungsmöglichkeit werden kann. Du möchtest nicht, dass jemand wiederholt Bestätigungs-E-Mails an denselben Posteingang auslöst.

Die öffentliche Antwort bleibt allgemein. Sie sollte nicht verraten, ob eine Adresse bereits existiert, auf Bestätigung wartet, unterdrückt wurde oder ein Limit erreicht hat. Dadurch wird verhindert, dass der Anmelde-Endpunkt zu einem Werkzeug für die Aufzählung von E-Mail-Adressen wird.

Token-Speicherung: Hash das, was du versendest

Bestätigungslinks sind sensibel, weil sie den Zugriff auf den Posteingang nachweisen.

Die Implementierung sendet ein zufälliges Token im E-Mail-Link, aber D1 speichert nur einen schlüsselbasierten Hash dieses Tokens. Bei der Bestätigung hasht der Worker das übermittelte Token und vergleicht es mit dem gespeicherten Hash. Das rohe Token liegt nicht in der Datenbank.

Dieses Design hält das System einfach und reduziert gleichzeitig den möglichen Schaden. Wenn eine Tabelle mit ausstehenden Bestätigungen offengelegt wird, erhält der Angreifer keine sofort verwendbaren Bestätigungslinks.

Das Token ist einmalig verwendbar. Nach einer erfolgreichen Bestätigung entfernt der Worker den ausstehenden Datensatz. Abgelaufene ausstehende Datensätze werden bei der normalen Arbeit an der Warteliste opportunistisch sowie über einen täglich geplanten Cloudflare Cron bereinigt.

Dieser Bereinigungspfad hält die Tabelle klein, ohne manuelle Datenbankarbeiten.

E-Mail-Versand über bestehendes Mailhosting

Viele Teams verfügen bereits über Mailhosting. Für eine Beta-Warteliste benötigen sie nicht immer einen neuen Anbieter für transaktionale E-Mails.

In der von mir verifizierten Implementierung wurde eine dedizierte Absenderadresse im bestehenden Mailhosting eingerichtet, und der Worker versendet über SMTP mit TLS. Die E-Mail ist schlicht: Beta-Anmeldung bestätigen, der Link ist 24 Stunden gültig, bei nicht angeforderter Anmeldung ignorieren.

Für diese Aufgabe reicht das aus.

Der Wert liegt nicht in einem ausgefallenen E-Mail-Design. Der Wert liegt in einem bekannten Absender, einem klar begrenzten Zweck und einem Zustellungsweg, der vor dem Launch per Smoke-Test geprüft werden kann. Für ein Startup ist das oft besser, als einen weiteren Anbieter hinzuzufügen, bevor das Produkt überhaupt Benutzer hat.

Admin-Ansichten sollten das Team vor falschen Annahmen schützen

Sicherheit betrifft nicht nur den öffentlichen Endpunkt.

Die Admin-Ansicht muss den Datenvertrag widerspiegeln. Verifizierte Adressen sollten standardmäßig angezeigt werden. Ältere nicht verifizierte oder Legacy-Einträge können weiterhin verfügbar sein, sollten aber einen ausdrücklich gesetzten Filter erfordern. Der CSV-Export sollte derselben Regel folgen.

So wird ein häufiger Launch-Fehler verhindert: alle historischen Einträge zu exportieren und sie wie bestätigte Nachfrage zu behandeln.

In einer kürzlich umgesetzten Implementierung enthielt die Produktionsliste bereits Legacy-Adressen, bevor das neue Verifizierungsmodell eingeführt wurde. Der Migrationsplan behält diese Adressen als Legacy-Einträge bei. Er markiert alte Einträge nicht stillschweigend als verifiziert, nur weil das neue System nun einen verifizierten Status besitzt.

Das ist der Unterschied zwischen Migration und dem Umschreiben der Geschichte.

Konfiguriert bedeutet nicht live

Diese Grenze gehört zu dem Service, den ich einem anderen Team liefern würde.

Ein Postfach kann existieren. Ein Turnstile-Widget kann existieren. Worker-Secret-Namen können konfiguriert sein. Tests können erfolgreich sein. Nichts davon bedeutet, dass die öffentliche Website bereits die neue Warteliste verwendet.

Für die aktuelle Referenzimplementierung ist der Double-Opt-in-Ablauf implementiert und lokal verifiziert. Die ausstehende D1-Migration, die neue Worker-Version und der geplante Cleanup-Cron benötigen noch Release-Freigabe und Deployment. Die öffentliche Website verwendet bis dahin weiterhin das alte Wartelistenformular.

Diese Unterscheidung schützt das Unternehmen. Eine D1-Migration verändert die Struktur der Produktionsdaten. Ein Worker-Deployment verändert das Anmeldeverhalten. Ein Cron fügt Hintergrundänderungen hinzu. Jeder Schritt benötigt ein ausdrückliches Release-Fenster, eine Verifizierung und Überlegungen zum Rollback.

Eine sichere Warteliste sollte nicht beiläufig ausgeliefert werden, nur weil das Wort „sicher“ daran steht.

Wie die Verifizierung aussieht

Für die Auslieferung einer produktionsreifen Warteliste möchte ich vor dem Launch Belege sehen.

Die Referenzimplementierung bestand 150 Tests. Astro check meldete 0 Fehler. Der Produktions-Build war erfolgreich. Die Arbeit war ausschließlich für das Web bestimmt, daher wurden bestehende Änderungen an nativen Apps nicht angefasst.

Die Release-Checkliste bleibt auch danach wichtig:

die additive D1-Migration bewusst anwenden
genau die für den Release vorgesehene Worker-Version deployen
bestätigen, dass das Turnstile-Widget auf den Live-Domains gerendert wird
eine eigene E-Mail-Adresse über das Live-Formular übermitteln
die SMTP-Zustellung vom dedizierten Absender verifizieren
über den Same-Origin-POST bestätigen
das Token ein zweites Mal verwenden und bestätigen, dass es fehlschlägt
verifizieren, dass abgelaufene ausstehende Datensätze bereinigt werden
verifizieren, dass Admin-Standards und CSV-Exporte verifizierte Einträge zuerst anzeigen

Das ist der Unterschied zwischen „der Code kompiliert“ und „der Anmelde-Funnel ist für Traffic bereit“.

Wo dies Startups hilft

Dieses Muster ist nützlich, wenn ein Team kurz vor der Beta steht, aber noch nicht für vollständige Konten bereit ist.

Vielleicht startest du eine mobile App, ein SaaS-Tool, eine private Alpha, ein geschütztes AI-Feature oder eine Reservierungsliste für Hardware. Du musst Nachfrage erfassen, benötigst aber auch saubere Daten und Einwilligung, bevor du Einladungen versendest.

Eine sichere Cloudflare-Warteliste bietet dir das ohne ein großes Backend:

Workers als Grenze für Anfragen
Turnstile für serverseitig validierten Bot-Schutz
D1 für verifizierte Einträge und ausstehende Bestätigungen
bestehendes SMTP für den Versand
Rate Limits und Honeypot-Prüfungen zur Missbrauchskontrolle
Admin-Filter und Exporte, die dem Datenvertrag entsprechen
ein Release-Gate, das konfigurierte Infrastruktur vom Live-Verhalten in der Produktion trennt

Sie ist klein genug, um schnell ausgeliefert zu werden, und strikt genug, um ihr zu vertrauen.

Du brauchst das für dein Produkt?

Ich kann dabei helfen, einen solchen Anmeldeablauf für ein Produktteam zu entwerfen, abzusichern oder zu implementieren.

Die nützliche Arbeit besteht nicht darin, ein CAPTCHA auf ein Formular zu setzen. Es geht darum zu entscheiden, was eine Anmeldung bedeutet, wie Einwilligung nachgewiesen wird, wo Tokens gespeichert werden, wie E-Mails zugestellt werden, was Admins standardmäßig sehen und wie der Release verifiziert wird, bevor öffentlicher Traffic darauf trifft.

Wenn deine Beta-Liste bald Teil deines Launch-Plans wird, lohnt es sich, sie vertrauenswürdig zu machen, bevor du sie für Entscheidungen verwendest.