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,
- ...
la source
Origin
? Cela annulerait la protection CORS.Réponses:
À la fin de la journée, vous devez «faire confiance» au navigateur client pour stocker en toute sécurité les données de l'utilisateur et protéger le côté client de la session. Si vous ne faites pas confiance au navigateur client, vous devez arrêter d'utiliser le Web pour autre chose que du contenu statique. Même avec l'utilisation de jetons CSRF, vous faites confiance au navigateur client pour qu'il obéisse correctement à la même politique d'origine .
Bien qu'il y ait eu des vulnérabilités de navigateur antérieures telles que celles dans IE 5.5 / 6.0 où il était possible pour les attaquants de contourner la politique de même origine et d'exécuter des attaques, vous pouvez généralement vous attendre à ce qu'elles soient corrigées dès qu'elles sont découvertes et avec la plupart des navigateurs se mettant à jour automatiquement. , ce risque sera en grande partie atténué.
L'en-
Origin
tête n'est normalement envoyé que pour les demandes interdomaines XHR. Les demandes d'image ne contiennent pas d'en-tête.Je ne sais pas si cela relève ou non des navigateurs manipulés, mais les anciennes versions de Flash permettaient de définir des en-têtes arbitraires qui permettraient à un attaquant d'envoyer une requête avec un en-
referer
tête usurpé depuis la machine de la victime afin d'exécuter une attaque.la source
crossdomain.xml
qui peut permettre la communication entre domaines.Le contenu Web ne peut pas altérer l'en-tête Origin. De plus, dans le cadre de la même politique d'origine, une origine ne peut même pas envoyer d'en-têtes personnalisés à d'autres origines. [1]
Ainsi, la vérification de l'en-tête Origin est tout aussi efficace pour bloquer les attaques que l'utilisation d'un jeton CSRF.
La principale préoccupation en s'appuyant sur cela est de savoir si cela permet à toutes les demandes légitimes de fonctionner. Le demandeur connaît ce problème et a mis en place la question pour écarter les cas majeurs (pas d'anciens navigateurs, HTTPS uniquement).
Les fournisseurs de navigateurs suivent ces règles, mais qu'en est-il des plugins? Ce n'est peut-être pas le cas, mais la question ne tient pas compte des «navigateurs manipulés». Qu'en est-il des bogues dans le navigateur qui permettent à un attaquant de forger l'en-tête Origin? Il peut y avoir des bogues qui permettent au jeton CSRF de fuir également entre les origines, il faudrait donc plus de travail pour affirmer que l'un est meilleur que l'autre.
la source