Questa è la diagnosi di una richiesta, non un dump di intestazioni. Descrivi la chiamata che fa il tuo codice - l'endpoint, l'origine su cui gira, il metodo, le intestazioni che imposta, se invia credenziali - e lo strumento dice se un browser ti lascerebbe leggere la risposta e quale controllo preciso lo ha deciso.
Cosa succede davvero durante un'analisi
- Preparare la richiesta esattamente come descritta.
- Classificarla come semplice o soggetta a preflight, secondo le regole dello standard Fetch che applica un browser.
- Provare il preflight con una vera richiesta OPTIONS con Origin, Access-Control-Request-Method e, dove serve, Access-Control-Request-Headers.
- Inviare la richiesta vera, perché il preflight da solo non mostra mai le intestazioni CORS della risposta reale.
- Sondare l'elenco delle origini consentite con una richiesta in più da un'origine che il server non ha mai visto.
- Costruire il rapporto: verdetto, percorso della richiesta, intestazioni, rilievi e scambio tecnico.
Il sondaggio dell'elenco consentito
Un server che risponde a ogni origine con quella stessa origine sembra identico a un elenco consentito configurato bene, se provi soltanto il tuo. Una richiesta da un'origine che il server non ha mai visto separa i due casi, e questo conta perché un server che rimanda l'origine come eco, insieme alle credenziali, è esattamente la configurazione che rende una risposta leggibile da ogni sito visitato da quell'utente.
Le credenziali cambiano le regole
| Intestazione | Con credenziali |
|---|
| Access-Control-Allow-OriginNiente asterisco | Deve nominare l'origine. Un asterisco viene rifiutato del tutto, anche accanto ad Access-Control-Allow-Credentials: true. |
| Allow-Methods, Allow-Headers, Expose-HeadersLetterale | Un asterisco smette di essere un jolly e si legge come nome letterale di intestazione o metodo. |
| Access-Control-Allow-CredentialsObbligatoria | L'unico valore accettato è la stringa esatta true, in minuscolo. |
Rilievi, non aggettivi
Ogni rilievo porta una gravità, una categoria, la fase da cui proviene, la prova su cui si fonda, le intestazioni che riguarda e una raccomandazione. Anche i controlli superati sono elencati, quindi un risultato pulito si vede invece di restare semplicemente vuoto. Due regole che le raccomandazioni seguono, perché il consiglio ovvio è spesso quello sbagliato: qui nulla ti dice di aprire un metodo, un'intestazione o un'origine solo per far sparire un riquadro rosso - un DELETE bloccato può essere un endpoint correttamente chiuso - e qui nulla suggerisce mai di rimandare come eco un'origine arbitraria. La risposta è un elenco consentito, ogni volta.
Cosa non pretende
CORS decide quali origini possono leggere una risposta dentro un browser. Non è autenticazione, non concede permessi e non ferma la falsificazione di richieste tra siti, perché un attacco CSRF non ha mai bisogno di leggere la risposta. Qualsiasi client che non sia un browser lo ignora del tutto. Questo strumento lo dice apertamente, invece di lasciare che un verdetto verde faccia pensare che il tuo endpoint sia protetto.