Qu'est-ce que CORS ?
Les navigateurs appliquent des règles strictes pour protéger les ressources. Par défaut, ils bloquent l’accès aux ressources provenant d’une origine différente (un domaine, un port ou un protocole différent), ce qui peut entraîner des erreurs telles que : Access to fetch at "origin différente" from origin "votre origine" has been blocked by CORS policy.
Pour contourner ces restrictions, les navigateurs utilisent un mécanisme appelé CORS (Cross-Origin Resource Sharing). Ce système permet d’autoriser le partage de ressources entre différentes origines en ajoutant des en-têtes de réponse tels que Access-Control-Allow-Origin, Access-Control-Allow-Headers et Access-Control-Allow-Credentials.
Cependant, cette politique ne s’applique pas aux ressources telles que les fichiers CSS, JavaScript ou images. En revanche, les requêtes HTTP effectuées depuis des scripts, par exemple avec XMLHttpRequest ou l’API Fetch, sont bloquées si elles ne respectent pas la politique de même origine.
La politique CORS est spécifique aux navigateurs web. Ainsi, lorsque vous effectuez des requêtes depuis des applications mobiles ou des outils comme Postman, vous ne serez pas soumis à ces restrictions, car celles-ci sont conçues pour protéger les interactions entre le navigateur et les serveurs web.
Pourquoi les navigateurs ont conçu le mécanisme CORS ?
Protection contre les attaques Cross-Site Scripting (XSS)
Les attaques XSS permettent à des attaquants d’injecter du code malveillant dans des pages web, ce qui peut entraîner le vol d’informations sensibles telles que des cookies ou des jetons d’authentification.
En restreignant les requêtes entre origines différentes, le mécanisme CORS limite la capacité des scripts malveillants à accéder aux données d’un site différent de celui d’où ils ont été chargés.
Prévention des attaques Cross-Site Request Forgery (CSRF)
Les attaques CSRF exploitent la confiance qu’un site web accorde au navigateur de l’utilisateur pour envoyer des requêtes non autorisées. CORS aide à prévenir ces attaques en limitant les requêtes HTTP entre différents sites web, réduisant ainsi les risques d’exécution de requêtes non autorisées sur des sites web tiers.
Contrôle granulaire des ressources partagées
CORS permet aux développeurs de concevoir des applications web plus sécurisées et robustes en offrant un contrôle détaillé sur le partage des ressources entre différentes origines. Cette fonctionnalité est cruciale pour préserver l’intégrité et la confidentialité des données.
Que faire si vous n'avez pas accès au serveur pour configurer les en-têtes CORS ?
Les erreurs CORS (Cross-Origin Resource Sharing) se produisent lorsque vous tentez d’effectuer une requête HTTP vers un domaine différent de celui d’où provient votre page web. Normalement, vous devez configurer le serveur cible pour autoriser les requêtes provenant de votre domaine en ajoutant les en-têtes CORS appropriés. Cependant, si vous n’avez pas accès à ce serveur, vous pouvez utiliser un proxy pour contourner ce problème.
La solution consiste à envoyer la requête vers votre propre domaine, puis à configurer un serveur proxy qui redirigera cette requête vers le domaine cible. Ainsi, les requêtes semblent provenir du même domaine, ce qui permet d’éviter les erreurs CORS.
Pour les développeurs de Symfony, vous pouvez installer le bundle Nelmio CORS.
Pour les développeurs de Laravel, les versions antérieures à 9.2 nécessitent l'installation du middleware Fruitcake Laravel CORS. Pour les versions 9.2 et supérieures, le middleware est inclus directement dans le framework.