human
Comprendre le jeton d'authenticité de Rail
gpt
Qu'est-ce que le CSRF ?
Le jeton d'authenticité est une contre-mesure contre les attaques de falsification de requête intersite (CSRF). Qu'est-ce que le CSRF, demandez-vous ?
C'est une façon pour un attaquant de potentiellement détourner des sessions sans même connaître les jetons de session.
Scénario :

* Visitez le site de votre banque, connectez-vous.
* Ensuite, visitez le site de l'attaquant (par exemple, une publicité sponsorisée par une organisation non fiable).
* La page de l'attaquant inclut un formulaire avec les mêmes champs que le formulaire "Transférer des fonds" de la banque.
* L'attaquant connaît vos informations de compte et a pré-rempli les champs du formulaire pour transférer de l'argent de votre compte vers le compte de l'attaquant.
* La page de l'attaquant inclut du code JavaScript qui soumet le formulaire à votre banque.
* Lorsque le formulaire est soumis, le navigateur inclut vos cookies pour le site de la banque, y compris le jeton de session.
* La banque transfère de l'argent vers le compte de l'attaquant.
* Le formulaire peut être dans un iframe invisible, vous ne saurez donc jamais que l'attaque a eu lieu.
* Cela s'appelle une falsification de requête intersite (CSRF).

Solution CSRF :

* Le serveur peut marquer les formulaires qui proviennent du serveur lui-même.
* Chaque formulaire doit contenir un jeton d'authentification supplémentaire en tant que champ caché.
* Le jeton doit être imprévisible (l'attaquant ne peut pas le deviner).
* Le serveur fournit un jeton valide dans les formulaires de ses pages.
* Le serveur vérifie le jeton lorsque le formulaire est envoyé, rejette les formulaires sans jeton approprié.
* Exemple de jeton : identifiant de session crypté avec la clé secrète du serveur.
* Rails génère automatiquement de tels jetons : voir le champ de saisie authenticity_token dans chaque formulaire.