98 votes

Les services web JSON sont-ils vulnérables aux attaques CSRF ?

Je suis en train de créer un service Web qui utilise exclusivement JSON pour le contenu de ses requêtes et de ses réponses (c'est-à-dire qu'il n'y a pas de charges utiles codées par formulaire).

Un service web est-il vulnérable à une attaque CSRF si les conditions suivantes sont réunies ?

  1. Tout POST sans objet JSON de premier niveau, par exemple, {"foo":"bar"} sera rejeté avec un 400. Par exemple, un POST avec le contenu 42 serait ainsi rejetée.

  2. Tout POST avec un type de contenu autre que application/json sera rejeté avec un 400. Par exemple, un POST demande avec content-type application/x-www-form-urlencoded serait ainsi rejetée.

  3. Toutes les demandes GET seront Sécurité et ne modifie donc aucune donnée côté serveur.

  4. Les clients sont authentifiés via un cookie de session, que le service web leur donne après qu'ils aient fourni un couple nom d'utilisateur/mot de passe correct via un POST avec des données JSON, par ex. {"username":"user@example.com", "password":"my password"} .

Question annexe : Est-ce que PUT y DELETE ne sont-elles jamais vulnérables au CSRF ? Je pose la question parce qu'il semble que la plupart (tous ?) des navigateurs interdisent ces méthodes dans les formulaires HTML.

EDIT : Ajouté le point #4.

EDIT : Beaucoup de bons commentaires et de bonnes réponses jusqu'à présent, mais personne n'a proposé une attaque CSRF spécifique à laquelle ce service web est vulnérable.

-8voto

symcbean Points 27412

Un service web est-il vulnérable à une attaque CSRF si les conditions suivantes sont réunies ?

Oui. C'est toujours HTTP.

Les requêtes PUT et DELETE sont-elles toujours vulnérables à CSRF ?

Oui

il semble que la plupart (tous ?) des navigateurs interdisent ces méthodes dans les formulaires HTML.

Pensez-vous qu'un navigateur est le seul moyen d'effectuer une requête HTTP ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X