web-dev-qa-db-fra.com

Angulaire: un caractère générique «*» ne peut pas être utilisé dans l'en-tête «Access-Control-Allow-Origin» lorsque l'indicateur d'informations d'identification est vrai

Je sais qu'il y a déjà beaucoup de questions concernant CORS mais elles ne semblent pas répondre à ma question.

J'ai donc une application client écrite en Angular qui sera utilisée pour créer une application mobile (avec Apache Cordova). Les fichiers html et les fichiers JavaScript seront chargés à partir de l'appareil mobile. Lorsque je simulerai cela et j'envoie des demandes au serveur REST API que j'ai d'abord reçu "Aucun en-tête" Access-Control-Allow-Origin "n'est présent sur la ressource demandée. Origin 'http://localhost:82 'n'est donc pas autorisé à accéder ". J'ai donc ajouté l'en-tête (" Access-Control-Allow-Origin: * "); dans mon php REST API Server. Je ne peux pas spécifier un domaine spécifique car les demandes proviendront des appareils mobiles.

Maintenant, je suis arrivé à "Un caractère générique" * "ne peut pas être utilisé dans l'en-tête" Access-Control-Allow-Origin "lorsque l'indicateur d'informations d'identification est vrai."

J'ai finalement trouvé une solution mais je ne suis pas sûr qu'il soit sûr de la garder comme ça.

Dans mon php REST API Server, j'ai ajouté ceci:

if (isset($_SERVER['HTTP_Origin'])) {
   header("Access-Control-Allow-Credentials: true");
   header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_Origin']);
   header("Access-Control-Allow-Headers: *, X-Requested-With, Content-Type");
   header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT");
}

Veuillez conseiller sur cette façon de travailler. Si ce n'est pas sûr ou pas bon du tout, pouvez-vous me dire comment résoudre ce problème?

Merci beaucoup!

17
mvermand

La réponse ne doit avoir que les en-têtes acceptés dans Access-Control-Allow-Headers, n'utilisez pas de caractères génériques.

Pour autant qu'il soit sûr, notez le commentaire de @Jules dans ce post sur CORS :

Notez que l'envoi de la valeur HTTP Origin en tant qu'origine autorisée permettra à quiconque de vous envoyer des demandes avec des cookies, volant ainsi potentiellement une session d'un utilisateur qui s'est connecté à votre site puis a consulté la page d'un attaquant. Vous souhaitez soit envoyer '*' (ce qui interdira les cookies empêchant ainsi le vol de session) ou les domaines spécifiques pour lesquels vous souhaitez que le site fonctionne.

Voir également les exemples suivants:

Wildcard non accepté dans Access-Control-Allow-Headers

Spécifiez les en-têtes Access-Control-Allow-Headers


Approche alternative

Vous pouvez simplement définir l'en-tête Origin sur:

Access-Control-Allow-Origin: *

Si vous n'avez pas besoin d'inclure des cookies dans votre demande, supprimez:

Access-Control-Allow-Credentials: true

Supprimez le caractère générique d'Access-Control-Allow-Headers et ajoutez une autorisation, puis passez cet en-tête dans le cadre de votre demande d'autorisation, au lieu de transmettre des informations d'identification dans un cookie, par exemple:

Authorization: Basic a2lkMT==

Ajoutez également les OPTIONS aux méthodes autorisées.

12
BatteryAcid