To diagnoza jednego żądania, a nie zrzut nagłówków. Opisujesz wywołanie, które robi Twój kod - punkt końcowy, origin, na którym działa, metodę, ustawiane nagłówki, to, czy wysyła poświadczenia - a narzędzie mówi, czy przeglądarka pozwoli Ci odczytać odpowiedź i która konkretnie kontrola o tym zdecydowała.
Co naprawdę dzieje się podczas analizy
- Przygotowanie żądania dokładnie tak, jak je opisano.
- Klasyfikacja jako proste albo wymagające preflightu, według reguł standardu Fetch, które stosuje przeglądarka.
- Test preflightu prawdziwym żądaniem OPTIONS z nagłówkami Origin, Access-Control-Request-Method i, gdy trzeba, Access-Control-Request-Headers.
- Wysłanie właściwego żądania, bo sam preflight nigdy nie pokazuje nagłówków CORS na prawdziwej odpowiedzi.
- Sprawdzenie listy dozwolonych origin jednym dodatkowym żądaniem z origin, którego serwer nigdy nie widział.
- Zbudowanie raportu: werdykt, przebieg żądania, nagłówki, ustalenia i wymiana techniczna.
Sprawdzenie listy dozwolonych origin
Serwer, który każdemu origin odpowiada tym samym origin, wygląda identycznie jak poprawnie skonfigurowana lista dozwolonych, jeżeli testujesz wyłącznie własny adres. Jedno żądanie z origin, którego serwer nigdy nie widział, rozdziela te dwa przypadki, a ma to znaczenie, bo serwer odbijający origin w połączeniu z poświadczeniami to konfiguracja, przez którą odpowiedź staje się czytelna dla każdej strony odwiedzanej przez użytkownika.
Poświadczenia zmieniają reguły
| Nagłówek | Z poświadczeniami |
|---|
| Access-Control-Allow-OriginBez gwiazdki | Musi wskazać origin. Gwiazdka jest odrzucana, nawet obok Access-Control-Allow-Credentials: true. |
| Allow-Methods, Allow-Headers, Expose-HeadersDosłownie | Gwiazdka przestaje być symbolem wieloznacznym i jest czytana jako dosłowna nazwa nagłówka albo metody. |
| Access-Control-Allow-CredentialsWymagany | Jedyną przyjmowaną wartością jest dokładny ciąg true, małymi literami. |
Konkrety, nie przymiotniki
Każde ustalenie niesie ważność, kategorię, fazę, z której pochodzi, dowód, na którym się opiera, nagłówki, których dotyczy, i zalecenie. Wypisane są też kontrole, które przeszły, więc czysty wynik jest widoczny, a nie po prostu pusty. Dwie zasady, którymi kierują się zalecenia, bo oczywista rada bywa złą radą: nic tutaj nie każe Ci otworzyć metody, nagłówka ani origin tylko po to, żeby zniknął czerwony komunikat - zablokowany DELETE może być poprawnie zamkniętym punktem końcowym - i nic tutaj nigdy nie proponuje odbijania dowolnego Origin. Odpowiedzią jest lista dozwolonych, za każdym razem.
Czego nie obiecuje
CORS decyduje, które origin mogą odczytać odpowiedź wewnątrz przeglądarki. Nie jest uwierzytelnianiem, nie przyznaje uprawnień i nie powstrzymuje ataków CSRF, bo atak CSRF nigdy nie musi odczytać odpowiedzi. Każdy klient, który nie jest przeglądarką, całkowicie to ignoruje. To narzędzie mówi o tym wprost, zamiast pozwolić, by zielony werdykt sugerował, że Twój punkt końcowy jest chroniony.