web-dev-qa-db-fra.com

Que fait exactement l'en-tête Access-Control-Allow-Credentials?

J'essaie de comprendre comment utiliser CORS et je ne comprends pas ce que fait l'en-tête Access-Control-Allow-Credentials.

La documentation dit

Indique si la réponse à la demande peut ou non être exposée lorsque l'indicateur d'informations d'identification est true.

Mais je ne comprends pas ce que la réponse étant "exposée" signifie.

Quelqu'un peut-il expliquer ce que fait réellement cet en-tête défini sur true (conjointement avec l'indicateur d'informations d'identification défini sur true)?

136
Nate

Par défaut, CORS n'inclut pas de cookies sur les demandes provenant de plusieurs pays. Ceci diffère des autres techniques d'origine croisée telles que JSON-P. JSON-P inclut toujours des cookies avec la demande, ce qui peut conduire à une classe de vulnérabilités appelée falsification de requête intersite , ou CSRF.

Afin de réduire le risque de vulnérabilités CSRF dans CORS, CORS exige que le serveur et le client reconnaissent qu'il est correct d'inclure des cookies sur les demandes. Cela fait des cookies une décision active, plutôt que quelque chose qui se passe de manière passive sans aucun contrôle.

Le code client doit définir la propriété withCredentials sur le XMLHttpRequest sur true afin de donner l'autorisation.

Cependant, cet en-tête à lui seul ne suffit pas. Le serveur doit répondre avec l'en-tête Access-Control-Allow-Credentials. Répondre avec cet en-tête à true signifie que le serveur autorise l'inclusion de cookies (ou d'autres identifiants d'utilisateur) dans les demandes provenant de plusieurs pays.

Vous devez également vous assurer que votre navigateur ne bloque pas les cookies tiers si vous voulez que les demandes avec informations d'identification croisées soient efficaces.

Notez que, que vous fassiez des requêtes de même origine ou d'origine croisée, vous devez protéger votre site contre les CSRF (surtout si votre demande inclut des cookies).

227
monsur