web-dev-qa-db-fra.com

Dois-je utiliser la protection CSRF pour les demandes GET?

J'ai vu plusieurs déclarations générales sur le Web selon lesquelles vous n'avez pas besoin de la protection CSRF pour les demandes GET.

Mais de nombreuses applications Web ont des demandes GET qui renvoient des données sensibles, non? Alors ne voudriez-vous pas protéger ceux-ci contre les attaques CSRF?

Suis-je en train de manquer quelque chose, ou ces déclarations générales supposent-elles que les données fournies par la demande GET sont sans importance?

Exemples de recommandations générales utilisant des jetons CSRF avec GET:

34
jtpereyda

La protection CSRF n'est nécessaire que pour les opérations de changement d'état en raison de la même politique d'origine . Cette politique stipule que:

un navigateur Web autorise les scripts contenus dans une première page Web à accéder aux données d'une deuxième page Web, mais uniquement si les deux pages Web ont la même origine.

Ainsi, l'attaque CSRF ne pourra pas accéder aux données demandées car il s'agit d'un cross-site (c'est le [~ # ~] cs [~ # ~] dans [~ # ~] csrf [~ # ~] ) demande et interdit par la même politique d'origine. L'accès illégal aux données n'est donc pas un problème avec CSRF.

Comme une attaque CSRF peut exécuter des commandes mais ne peut pas voir leurs résultats, elle est obligée d'agir aveuglément. Par exemple, une attaque CSRF peut indiquer à votre navigateur de demander le solde de votre compte bancaire, mais il ne peut pas voir ce solde. Il s'agit évidemment d'une attaque inutile (sauf si vous essayez de DDoS le serveur de banque ou quelque chose). Mais il n'est pas inutile si, par exemple, l'attaque CSRF indique à votre navigateur de charger votre banque de transférer de l'argent de votre compte vers le compte de l'attaquant. La page de réussite ou d'échec du transfert est inaccessible au script attaquant. Heureusement pour l'attaquant, ils n'ont pas besoin de voir la réponse de la banque, ils veulent juste l'argent sur leur compte.

Comme seules les opérations de changement d'état sont susceptibles d'être la cible d'attaques CSRF, seules elles ont besoin de défenses CSRF.

36
Neil Smithline

Ordinairement méthodes sûres ne doivent pas être protégés contre CSRF car ils n'apportent pas de modifications à l'application, et même s'ils renvoient des informations sensibles, cela sera protégé par --- Même politique d'origine dans le navigateur.

Si votre site est mis en œuvre conformément aux normes, vos demandes GET doivent être sécurisées et n'ont donc pas besoin de protection.

Cependant, il existe un cas spécifique où un "DoS intersite"* l'attaque pourrait être exécutée. Supposons que votre page de rapport prenne 10 secondes à exécuter, avec 100% d'utilisation du processeur sur votre serveur de base de données et 80% d'utilisation du processeur sur votre serveur Web.

Les utilisateurs de votre site Web savent qu'il ne faut jamais aller à https://yoursite.example.org/Analysis/GetReport pendant les heures de bureau car il tue le serveur et donne à d'autres utilisations une mauvaise expérience utilisateur.

Cependant, Chuck veut frapper votre yoursite.example.org site Web hors ligne, car il n'aime pas vous ou votre entreprise.

Sur le forum occupé qu'il poste souvent, http://forum.walkertexasranger.example.com, il appose sa signature comme suit:

<img src="https://yoursite.example.org/Analysis/GetReport" width=0 height=0 />

Il sait également que les employés de votre entreprise fréquentent le forum, souvent lorsqu'ils sont également connectés à yoursite.example.org.

Chaque fois que l'un des messages de Chuck est lu par vos employés, des cookies d'authentification sont envoyés à https://yoursite.example.org/Analysis/GetReport, afin que votre site traite la demande et génère le rapport, et votre système se déconnecte car le processeur est consommé par ces demandes constantes.

Ainsi, même si la demande est une demande GET et n'apporte pas de modifications permanentes à votre système (alias "sûr"), elle est en fait en train de faire tomber votre système à chaque exécution. Par conséquent, il serait préférable de protéger cela avec une méthode de prévention CSRF.

* XSDoS, ou Cross-Site Denial if Service, est une expression inventée par moi, alors ne cherchez pas sur Google.

18
SilverlightFox

La protection CSRF n'est pas utilisée pour protéger les données. Il est utilisé pour protéger un utilisateur contre un changement d'état inconscient, tel que le transfert d'argent ou la déconnexion d'un compte.

Ainsi, si votre demande GET change un état (ce qui ne devrait pas être le cas), alors vous devriez avoir une protection CSRF. Mais s'il ne s'agit que de renvoyer des données, il n'a pas besoin de protection CSRF, car la protection CSRF ne protégerait rien dans ce cas.

Il peut être utile de parcourir à nouveau cette page: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29

6
d1str0

CSRF, ou Cross-Site Request Forgery, ne consiste pas à protéger les données contre leur récupération, mais à protéger les données contre toute modification. Ceci est également appelé changements d'état. Dans une application, les changements d'état peuvent inclure des données de profil, comme l'adresse e-mail, le mot de passe utilisateur ou la biographie, ou le transfert de fonds.

Les requêtes GET doivent être utilisées pour les requêtes idempotentes ou les requêtes qui ne changent pas d'état. Ces demandes n'ont pas besoin de jetons anti-CSRF.

Les requêtes POST doivent être utilisées pour les requêtes non idempotentes ou les requêtes qui changent d'état.

1
h4ckNinja

Généralement, les requêtes POST doivent être utilisées pour changer l'état de quelque chose. Si vous avez des requêtes GET configurées pour qu'elles puissent changer l'état (par exemple www.example.com/settings?delete_account=True ), vous devez alors utiliser la protection CSRF comme un correctif Band-Aid.

Essayez d'utiliser des POST pour changer l'état, pas des GET.

0
Stoud