Erlaubte Domains
Erlaubte Domains (eine Allowlist für Domains) sorgen dafür, dass Ihr öffentlicher Schlüssel nur auf
Ihren eigenen Websites funktioniert. Jede Anfrage mit öffentlichem Schlüssel wird anhand des
Origin-Headers des Browsers (oder Referer, wenn Origin fehlt) mit der Liste abgeglichen.
Anfragen von anderen Origins werden mit
403 origin_not_allowed abgelehnt und verbrauchen keine
Credits.
Erlaubte Domains gibt es in jedem Tarif, auch in Free.
Einrichten
Abschnitt betitelt „Einrichten“Inhaber und Admins tragen Einträge unter Sicherheit → Erlaubte Websites ein: Domain eingeben,
auf Hinzufügen klicken (ein Eintrag nach dem anderen, bis zu 100) und speichern. Die Einträge
werden mit dem Host des Origins der Anfrage verglichen; das Schema (http/https) spielt keine
Rolle.
| Eintrag | Passt auf |
|---|---|
example.com |
https://example.com und http://example.com auf jedem Port – aber nicht www.example.com |
*.example.com |
jede Subdomain: www.example.com, shop.eu.example.com – aber nicht example.com selbst |
localhost |
lokale Entwicklung auf jedem Port |
localhost:3000 |
nur diesen Port |
127.0.0.1 |
lokale Entwicklung über die IP |
my-app.pages.dev |
Preview-Deployments bei einem Hosting-Anbieter |
Tragen Sie sowohl example.com als auch *.example.com ein, wenn Sie die Hauptdomain und
Subdomains brauchen.
Mobile Apps
Abschnitt betitelt „Mobile Apps“Native Apps (React Native, Flutter, Swift, Kotlin) senden weder Origin noch Referer, daher lehnt
die öffentliche API sie standardmäßig ab (wie EmailJS, das Anfragen außerhalb von Browsern blockiert,
solange Sie sie nicht freischalten). Um aus einer App mit dem öffentlichen Schlüssel zu senden,
schalten Sie Sicherheit → Mobile Apps → Mobile Apps erlauben ein (standardmäßig aus) und klicken
auf Speichern. Dann gilt:
| Anfrage | Mobile Apps aus, Liste leer | Mobile Apps aus, Liste gesetzt | Mobile Apps an, Liste leer | Mobile Apps an, Liste gesetzt |
|---|---|---|---|---|
Origin / Referer steht auf der Liste |
angenommen | angenommen | angenommen | angenommen |
Origin / Referer steht nicht auf der Liste |
angenommen | 403 origin_not_allowed |
angenommen | 403 origin_not_allowed |
weder Origin noch Referer (native App, Server, curl) |
403 origin_not_allowed |
403 origin_not_allowed |
angenommen | angenommen |
Origin: null |
angenommen | 403 origin_not_allowed |
angenommen | 403 origin_not_allowed |
Der Fehler bei einer Anfrage ohne Origin enthält details.reason: "no_origin". Das Erlauben mobiler
Apps entscheidet auch, welcher CAPTCHA-Schlüssel solche Anfragen prüft: Nur bei eingeschaltetem
Schalter werden sie mit dem gemeinsamen mobilen Widget von Frontmail geprüft (siehe
Turnstile).
Anfragen mit Origin oder Referer werden immer mit der Liste abgeglichen – das Einschalten des
Schalters schwächt also den Schutz Ihrer Websites nicht. Origin: null (Iframes mit Sandbox,
file://-Seiten) gilt nicht als mobile App. Turnstile bleibt für jede
Vorlage erforderlich, bei der es eingeschaltet ist. Die Änderung wird im
Audit-Log als security.updated festgehalten.
Wovor die Liste schützt – und wovor nicht
Abschnitt betitelt „Wovor die Liste schützt – und wovor nicht“Browser setzen Origin selbst, und Skripte können ihn nicht fälschen – die Allowlist verhindert also,
dass andere Websites Ihren Schlüssel einbetten. Ein Skript außerhalb eines Browsers (curl, ein Bot)
kann jedoch einen beliebigen Origin-Header senden. Deshalb sind erlaubte Domains nur eine
Schutzschicht, kombiniert mit Turnstile,
Rate Limits und dem Bot-Schutz.
Anfragen mit privatem Schlüssel überspringen die Origin-Prüfung – sie kommen von Servern, die
keinen Origin haben. Eine Anfrage mit privatem Schlüssel, die doch einen Origin-Header trägt,
kommt von einer Webseite, auf der jeder Besucher den Schlüssel lesen kann; sie wird mit
403 private_key_in_browser abgelehnt, sofern Sie
nicht Private Schlüssel im Browser erlauben einschalten (siehe
Schlüssel).
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“- Funktioniert lokal, schlägt in Produktion fehl: Tragen Sie die Produktivdomain (und die
www.-Variante) ein. - Schlägt in einer nativen App oder aus einem Serverskript fehl (
403 origin_not_allowed,details.reason: "no_origin"): Schalten Sie für Apps Mobile Apps erlauben ein; auf Servern verwenden Sie einen privaten Schlüssel. - Schlägt in einer mobilen WebView oder Browsererweiterung fehl: Der Origin kann
null,file://oderchrome-extension://…sein. Senden Sie stattdessen von Ihrem Backend mit einem privaten Schlüssel. - Schlägt hinter einer Datenschutz-Erweiterung fehl, die
Refererentfernt: Moderne Browser senden beiPOST-Anfragen immerOrigin, das ist also selten; prüfen Sie die Anfrage in den DevTools.