Dozwolone domeny
Dozwolone domeny (allowlista domen) sprawiają, że twój klucz publiczny działa tylko na twoich
własnych stronach. Każde żądanie z kluczem publicznym jest sprawdzane z listą na podstawie nagłówka
Origin wysyłanego przez przeglądarkę (albo Referer, gdy Origin brakuje). Żądania z innych
domen są odrzucane z błędem 403 origin_not_allowed
i nie zużywają kredytów.
Dozwolone domeny są dostępne w każdym planie, także Free.
Konfiguracja
Dział zatytułowany „Konfiguracja”Właściciel i administratorzy dodają wpisy w Bezpieczeństwo → Dozwolone domeny: wpisują domenę,
klikają Dodaj (po jednym wpisie, maksymalnie 100) i zapisują. Wpisy są porównywane z hostem
w originie żądania; schemat (http/https) nie ma znaczenia.
| Wpis | Pasuje do |
|---|---|
example.com |
https://example.com i http://example.com na dowolnym porcie – ale nie www.example.com |
*.example.com |
dowolnej subdomeny: www.example.com, shop.eu.example.com – ale nie samego example.com |
localhost |
lokalnego developmentu na dowolnym porcie |
localhost:3000 |
tylko tego portu |
127.0.0.1 |
lokalnego developmentu przez adres IP |
my-app.pages.dev |
wdrożeń podglądowych (preview) u dostawcy hostingu |
Jeśli potrzebujesz domeny głównej i subdomen, dodaj zarówno example.com, jak i *.example.com.
Aplikacje mobilne
Dział zatytułowany „Aplikacje mobilne”Aplikacje natywne (React Native, Flutter, Swift, Kotlin) nie wysyłają ani Origin, ani Referer,
więc publiczne API domyślnie je odrzuca (podobnie jak EmailJS, które blokuje żądania spoza
przeglądarki, dopóki ich nie włączysz). Żeby wysyłać z aplikacji z kluczem publicznym, włącz
Bezpieczeństwo → Aplikacje mobilne → Zezwól na aplikacje mobilne (domyślnie wyłączone) i kliknij
Zapisz. Wtedy:
| Żądanie | Aplikacje mobilne wył., lista pusta | Aplikacje mobilne wył., lista ustawiona | Aplikacje mobilne wł., lista pusta | Aplikacje mobilne wł., lista ustawiona |
|---|---|---|---|---|
Origin / Referer jest na liście |
przyjęte | przyjęte | przyjęte | przyjęte |
Origin / Referer nie ma na liście |
przyjęte | 403 origin_not_allowed |
przyjęte | 403 origin_not_allowed |
bez Origin i bez Referer (aplikacja natywna, serwer, curl) |
403 origin_not_allowed |
403 origin_not_allowed |
przyjęte | przyjęte |
Origin: null |
przyjęte | 403 origin_not_allowed |
przyjęte | 403 origin_not_allowed |
Błąd dla żądania bez Origin ma details.reason: "no_origin". Zezwolenie na aplikacje mobilne
decyduje też o tym, którym kluczem CAPTCHA weryfikujemy takie żądania: wspólnym mobilnym widgetem
Frontmail tylko wtedy, gdy przełącznik jest włączony (zobacz Turnstile).
Żądania z nagłówkiem Origin lub Referer są zawsze sprawdzane z listą, więc włączenie
przełącznika nie osłabia ochrony twoich stron. Origin: null (iframe’y z sandboxem, strony
file://) nie jest traktowany jak aplikacja mobilna. Turnstile jest
nadal wymagany dla każdego szablonu, który ma go włączonego. Zmiana trafia do
dziennika zdarzeń jako security.updated.
Przed czym chroni, a przed czym nie
Dział zatytułowany „Przed czym chroni, a przed czym nie”Nagłówek Origin ustawia sama przeglądarka i skrypty nie mogą go podrobić, więc allowlista nie
pozwala innym stronom osadzić twojego klucza. Skrypt działający poza przeglądarką (curl, bot)
może jednak wysłać dowolny nagłówek Origin. Dlatego dozwolone domeny to tylko jedna warstwa,
w połączeniu z Turnstile, rate limitami
i ochroną przed botami.
Żądania z kluczem prywatnym pomijają sprawdzanie domeny – pochodzą z serwerów, które nie mają
originu. Żądanie z kluczem prywatnym, które ma nagłówek Origin, pochodzi ze strony
internetowej, gdzie klucz może odczytać każdy odwiedzający; odrzucamy je z błędem
403 private_key_in_browser, chyba że włączysz
Zezwól na klucze prywatne w przeglądarkach (zobacz Klucze).
Rozwiązywanie problemów
Dział zatytułowany „Rozwiązywanie problemów”- Lokalnie działa, na produkcji nie: dodaj domenę produkcyjną (i wariant z
www.). - Nie działa w aplikacji natywnej ani ze skryptu na serwerze (
403 origin_not_allowed,details.reason: "no_origin"): dla aplikacji włącz Zezwól na aplikacje mobilne, na serwerach używaj klucza prywatnego. - Nie działa w mobilnym WebView albo w rozszerzeniu przeglądarki: origin może mieć wartość
null,file://lubchrome-extension://…. Wysyłaj wtedy ze swojego backendu z kluczem prywatnym. - Nie działa z rozszerzeniem chroniącym prywatność, które usuwa
Referer: nowoczesne przeglądarki przy żądaniachPOSTzawsze wysyłająOrigin, więc zdarza się to rzadko; sprawdź żądanie w DevTools.