HervéRenault.fr

Logo non-officiel de JavaScript

CORS, à quoi ça sert ?

Imaginons que je visite un site BIDULE.fr sans savoir qu'il a été "infecté" ("piraté") pour que mon navigateur fasse discrètement des requêtes à MA-BANQUE.fr en JavaScript avec XmlHttpRequest ("en Ajax"). Si je suis connecté à ce site bancaire, ces requêtes pourraient potentiellement aboutir et la personne qui a infecté BIDULE.fr pourrait donc récupérer mes données bancaires. Heureusement, CORS est un mécanisme dans les navigateurs et les serveurs qui permet de l'empêcher.

Quand mon navigateur est sur BIDULE.fr, le site infecté, il va appeler discrètement le serveur de MA-BANQUE.fr avec l'en-tête Origin: https://BIDULE.fr/ dans la requête XmlHttpRequest. Le serveur de MA-BANQUE.fr va normalement refuser de partager ses ressources avec ce site inconnu qu'est BIDULE.fr et donc il va répondre sans en-tête Access-Control-Allow-Origin. Mon navigateur va afficher dans sa console d'erreurs "CORS Missing Allow Origin" et n'ira pas plus loin.

Comment ça se passe pour un site sain :

Sur un site qui n'est pas infecté, disons MONSITE.fr, on peut aussi légitimement charger des données en Ajax sur un autre nom de domaine, par exemple IMAGES.MONSITE.fr (un sous-domaine) ou JSON.UNAUTRESITE.fr (ou tout autre type de donnée) et dans ce cas, le serveur doit répondre Access-Control-Allow-Origin: https://MONSITE.fr parce que l'administrateur du serveur l'a explicitement autorisé dans un .htaccess (Header set Access-Control-Allow-Origin "https://MONSITE.fr") par exemple.

Il y a aussi des serveurs qui acceptent de partager leurs contenus avec tout le monde, comme les serveurs de polices de caractères de Google. Ces serveurs répondent avec Access-Control-Allow-Origin: *