Tutte le guide
Gravità AltoConfigurazioni errate

Configurazione CORS errata: le trappole del wildcard e della riflessione

Il Cross-Origin Resource Sharing (CORS) controlla quali altri siti web possono leggere le risposte della tua API. Una policy con wildcard o con origine riflessa può permettere a qualsiasi sito di effettuare richieste autenticate e leggerne i risultati.

Che cos'è

I browser bloccano le letture cross-origin per impostazione predefinita. Gli header CORS allentano selettivamente questa regola. Access-Control-Allow-Origin: * apre le risposte a qualsiasi sito web.

Un bug più sottile è la riflessione dell'origine: il server rimanda nell'header allow-origin qualunque Origin fosse presente nella richiesta, il che di fatto si fida di tutti pur sembrando specifico.

Perché è importante

Se la tua API serve dati utente e consente le credenziali, una policy CORS troppo ampia permette a un sito dannoso di leggere i dati di una vittima connessa direttamente dalla tua API.

La riflessione combinata con Access-Control-Allow-Credentials: true è particolarmente pericolosa: vanifica la protezione same-origin che normalmente mantiene privati i dati degli utenti.

Come risolverlo

Consenti origini specifiche

Valida l'Origin della richiesta rispetto a un elenco fisso di domini attendibili e solo allora rimandalo indietro.

const ALLOWED = new Set(["https://app.yourdomain.com"]);
const origin = req.headers.get("origin") ?? "";
const allow = ALLOWED.has(origin) ? origin : "";
// only set the header when allow is non-empty
Non combinare mai il wildcard con le credenziali

I browser vietano Access-Control-Allow-Origin: * insieme alle credenziali, quindi le app a volte riflettono l'origine — ed è proprio questa la vulnerabilità. Usa invece una allowlist rigorosa.

Per impostazione predefinita, nessun CORS

Se un endpoint non ha bisogno di accesso cross-origin, non inviare alcun header CORS. Apri solo le route specifiche che ne hanno davvero bisogno.

FAQ

Access-Control-Allow-Origin: * è sempre un male?

Non per risorse davvero pubbliche e senza credenziali (ad es. un font pubblico o un'API di open data). È pericoloso per qualsiasi cosa legata a una sessione utente.

Il CORS protegge il mio server?

No: il CORS è applicato dal browser, non dal server. Governa ciò che il JavaScript di altri siti può leggere, non se una richiesta ti raggiunge.

La tua app è interessata?

AppSafe controlla questo e decine di altri problemi in un'unica scansione gratuita.

Scansiona la mia app gratis