Cette question concerne uniquement la protection contre les attaques de falsification de requêtes intersites.
Il s'agit spécifiquement de: La protection via l'en-tête d'origine (CORS) est-elle aussi bonne que la protection via un jeton CSRF?
Exemple:
- Alice est connectée (à l'aide d'un cookie) avec son navigateur à " https://example.com ". Je suppose qu'elle utilise un navigateur moderne.
- Alice visite " https://evil.com ", et le code côté client de evil.com effectue une sorte de requête à " https://example.com " (scénario CSRF classique).
Alors:
- Si nous ne vérifions pas l'en-tête Origin (côté serveur) et aucun jeton CSRF, nous avons une faille de sécurité CSRF.
- Si nous vérifions un jeton CSRF, nous sommes en sécurité (mais c'est un peu fastidieux).
- Si nous vérifions l'en-tête Origin, la demande du code côté client de evil.com devrait être bloquée aussi bien que lors de l'utilisation d'un jeton CSRF - sauf s'il est possible que le code de evil.com définisse l'en-tête Origin.
Je sais que cela ne devrait pas être possible avec XHR (voir par exemple Sécurité pour le partage de ressources cross-origin ), du moins pas, si nous faisons confiance aux spécifications du W3C pour être correctement implémentées dans tous les navigateurs modernes (pouvons-nous?)
Mais qu'en est-il des autres types de demandes - par exemple, la soumission d'un formulaire? Chargement d'une balise script / img / ...? Ou de toute autre manière qu'une page peut utiliser pour créer (légalement) une demande? Ou peut-être un piratage JS connu?
Remarque: je ne parle pas de
- applications natives,
- navigateurs manipulés,
- bogues de script intersite dans la page example.com,
- ...
Origin
? Cela annulerait la protection CORS.