web-dev-qa-db-fra.com

Pourquoi les en-têtes de contrôle d'accès sont-ils nécessaires?

Je cherchais les raisons de sécurité spécifiques expliquant pourquoi cela avait été ajouté. C'était un peu le moment WTH lorsque j'ai implémenté cors et que je pouvais voir tous les en-têtes renvoyés, mais je ne pouvais pas y accéder via JavaScript.

57
Blake Niemyjski

La CORS est mise en œuvre de manière à ne pas briser les hypothèses formulées dans le monde antérieur à la CORS, à origine identique.

Dans le monde antérieur à CORS, un client pouvait déclencher une demande d'origine croisée (par exemple, via une balise de script), mais ne pouvait pas lire les en-têtes de réponse.

Afin de garantir que CORS ne casse pas cette hypothèse, la spécification CORS exige que le serveur donne des autorisations explicites au client pour lire ces en-têtes (via l'en-tête Access-Control-Expose-Headers). De cette façon, les demandes CORS non autorisées se comportent comme dans un monde pré-CORS.

75
monsur

C'est une très bonne question. En parcourant http://www.w3.org/TR/cors/#simple-response-header , il n’est pas évident de comprendre pourquoi vous voulez ou devez faire cela. 

La spécification CORS donne beaucoup de poids à l’idée que vous devez avoir une poignée de main de pré-demande dans laquelle le client demande un type de connexion et le serveur répond qu’il le permettra. . 

Par défaut, content-length n'est pas un en-tête autorisé. Je me suis donc retrouvé confronté au même problème (plus tard, lorsque je devais accéder à WebDAV et que je devais modifier les paramètres autorisés). ) en premier lieu, donc cela ne me surprendrait pas si des bandes capricieuses sont capricieuses. 

4
synthesizerpatel

Voici la raison pour laquelle les en-têtes de contrôle d'accès sont nécessaires:

En-têtes de contrôle d'accès (facultatif) - L'objet XMLHttpRequest 2 a une méthode getResponseHeader () qui renvoie la valeur d'un en-tête de réponse particulier. Lors d'une demande CORS, la méthode getResponseHeader () ne peut accéder qu'aux en-têtes de réponse simples. Les en-têtes de réponse simples sont définis comme suit:

  • Cache-Control 
  • Contenu-Langue 
  • Type de contenu
  • Expire
  • Dernière modification
  • Pragma

Si vous souhaitez que les clients puissent accéder à d'autres en-têtes, vous devez utiliser l'en-tête Access-Control-Expose-Headers. La valeur de cet en-tête est une liste délimitée par des virgules des en-têtes de réponse que vous souhaitez exposer au client.

pour plus de références, veuillez creuser dans le lien https://www.html5rocks.com/fr/tutorials/cors/

Bonne codage !!

1
Developer