Archives de catégorie : CORS

Les liens de la semaine – Édition #176

Développement

.NET

Web

Technologie

Science et autres

 

Une brève explication du concept de la restriction d’origine d’exécution avec JavaScript (Same-Origin et CORS)

Internet est composé d’un drôle d’amalgame de concepts datant des années 1990 et de technologies novatrices qui sont créées à même ces piliers. Depuis sa création, le protocole HTTP, dans ses grandes lignes, est resté semblable.

Le protocole HTTP est à la base de toutes les requêtes que vous faites avec votre navigateur. C’est ce qui permet de transférer le texte entre un serveur web et votre navigateur. Je ne vous apprends rien de nouveau là dessus.

Initialement, une page web était un document assez statique composé de texte, d’images et quelques feuilles de styles sinon très peu. La nécessité d’avoir du dynamisme sur une page web s’est fait sentir très tôt dans l’histoire du web. C’est ainsi que JavaScript a été créé par Netscape en 1995.

Same-Origin

Dès sa création, des mécanismes de sécurité ont dû être mis en place pour limiter la portée d’exécution de JavaScript. C’est ainsi que la politique d’origine d’exécution (Same-Origin) a été instaurée.

Le concept en question est très simple à comprendre. Un script JavaScript doit accéder aux requêtes du domaine d’où il provient. La principale raison de ceci est une question de sécurité.

Groso modo, vous ne pouvez pas faire ce genre de requêtes.

cors

Imaginez si n’importe quel script provenant de l’externe serait en mesure d’accéder à vos cookies d’authentification à n’importe quel moment sans votre autorisation? Trop facile!

Une méthode de contournement

Avez-vous déjà entendu parler du CORS? Ou même de la technique utilisant document.domain?

Il s’agit de deux techniques vous permettant de contourner, avec le consentement de votre vis à vis côté serveur, la restriction de l’origine d’exécution JavaScript. Parce qu’avec toute règle, ça prend une exception pour la confirmer. N’est-ce pas?

document.domain

Cette technique repose sur l’assignation à la propriété document.domain du nom de domaine vers lequel vous tentez d’utiliser la ressource. Toutefois, cette technique implique que les deux ressources web doivent utiliser une valeur commune pour cette propriété.

De plus, certaines règles sont à respecter en lien avec le nom de domaine utilisé et ce qui peut être assigné à document.domain. Les règles sont bien résumées ici.

Personnellement, cette technique est à utiliser avec précaution, car elle est sujette à changements d’interprétations par les différents navigateurs. La meilleure technique à utiliser est CORS.

CORS

Le CORS est en fait, comme vous vous en doutez bien, un acronyme pour Cross-Origin Resource Sharing. Il s’agit d’un en-tête de réponse HTTP qui spécifie les domaines pouvant faire appel à une ressource HTTP.

Cela fait en sorte que la politique d’accès aux ressources est spécifiée par le serveur web qui héberge. L’entête HTTP en question prend la forme suivante :

HTTP/1.1 200 OK
Date: Thu, 18 Feb 2014 10:43:27 GMT
Server: Apache/2.0.61 
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json

Dans le cas mentionné, l’entête autorise l’accès aux ressources du site à toutes requêtes de type intersites. Si l’entête est manquant, vous ne serez pas autorisé à faire une requête comme j’ai illustré plus haut.

Sources