CORS – Cross-Origin Resource Sharing
Cross-Origin Resource Sharing est un mécanisme de sécurité qui contrôle les ressources qu’un navigateur peut récupérer depuis un domaine différent de celui qui a servi la page web. Par défaut, les navigateurs bloquent les requêtes HTTP provenant d’un domaine différent pour éviter les attaques potentielles, comme le vol de données de session.
Comment fonctionne CORS ?
CORS permet aux serveurs de spécifier les domaines autorisés à accéder à certaines ressources via des en-têtes HTTP particuliers, par exemple :
Access-Control-Allow-Origin
: Spécifie quel(s) domaine(s) peuvent accéder aux ressources. Une valeur typique seraithttps://example.com
ou*
pour autoriser tous les domaines (mais c’est rarement conseillé pour des raisons de sécurité).Access-Control-Allow-Methods
: Indique quelles méthodes HTTP (GET, POST, etc.) sont autorisées.Access-Control-Allow-Headers
: Liste les en-têtes spécifiques que le client peut utiliser dans la requête.Access-Control-Allow-Credentials
: Permet ou refuse l’envoi de cookies et autres identifiants de session avec la requête.
Exemple de Configuration Apache pour CORS
Sur un serveur Apache, vous pouvez configurer CORS dans un fichier .htaccess
ou dans la configuration du serveur. Par exemple, pour autoriser uniquement https://example.com
à accéder aux ressources :
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "https://example.com"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
</IfModule>
Si vous voulez autoriser plusieurs domaines :
<IfModule mod_headers.c>
SetEnvIf Origin "https://(example1|example2)\.com$" AccessControlAllowOrigin=$0
Header set Access-Control-Allow-Origin "%{AccessControlAllowOrigin}e" env=AccessControlAllowOrigin
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
</IfModule>
Quand utiliser CORS ?
- Applications multi-domaine : Si vous avez une API sur un domaine (par exemple,
api.example.com
) et une application frontale sur un autre (app.example.com
). - Intégrations externes : Lorsque vous autorisez des domaines partenaires ou clients à accéder à vos ressources.
Risques et Meilleures Pratiques
CORS doit être configuré avec soin. Évitez d’utiliser *
(tous les domaines) pour Access-Control-Allow-Origin
, sauf si les données sont publiques. En limitant les méthodes et les en-têtes, vous réduisez la surface d’attaque et contrôlez mieux les accès externes.