Hello,
Je suis un bille en sécurité et ce soir j’ai voulu en apprendre un peu plus sur la manière dont sont faites les requêtes lorsque des données sensibles sont en jeu.
Pour cela j’ai voulu me lancer un défi qui me paraissait tout simple : m’identifier sur ZdS avec curl.
En regardant les requêtes au moment du login, j’ai trouvé le cookie csrftoken
ainsi qu’un champ de formulaire masqué csrfmiddlewaretoken
, j’ai cherché à quoi ils servaient et j’ai appris pleins de trucs.
Bref, je commence donc par simuler ma première visite sur la page de connexion (sur la beta) :
1 2 3 | curl -v -c cookies.txt -b cookies.txt \ https://beta.zestedesavoir.com/membres/connexion/ \ | grep csrfmiddlewaretoken |
… afin de stocker le csrftoken dans le fichier de cookies et récupérer la valeur de csrfmiddlewaretoken.
1. première chose, je constate que ces 2 valeurs ne correspondent pas, pourquoi ? De ce que j’avais compris de CSRF je pensais que c’était censé être le cas.
Mais bref continuons : je simule la validation du formulaire de connexion, en passant le fichier de cookie et la valeur du csrfmiddlewaretoken précédemment obtenue :
1 2 3 | curl -v -c cookies.txt -b cookies.txt \ -d '{"username":"roipoussiere","password":"xxx","csrfmiddlewaretoken":"xDeB...V0Px","remember":"on"}' \ https://beta.zestedesavoir.com/membres/connexion/ |
Là bim, je me fais jeter par ZdS qui m’explique qu’il me faut le referer :
Interdit (403). La vérification CSRF a échoué. La requête a été interrompue. Vous voyez ce message parce que ce site HTTPS exige que le navigateur Web envoie un en-tête « Referer », ce qu’il n’a pas fait. Cet en-tête est exigé pour des raisons de sécurité, afin de s’assurer que le navigateur n’ait pas été piraté par un intervenant externe.
2. Je ne comprend pas trop pourquoi le Referer est requis puisque justement il y a un système de token pour se prémunir des intervenants externes.
Mais soit :
1 2 3 4 | curl -v -c cookies.txt -b cookies.txt \ --referer https://beta.zestedesavoir.com/membres/connexion/ \ -d '{"username":"roipoussiere","password":"xxx","csrfmiddlewaretoken":"xDeB...V0Px","remember":"on"}' \ https://beta.zestedesavoir.com/membres/connexion/ |
Et re-bim :
Interdit (403). La vérification CSRF a échoué. La requête a été interrompue.
3. Pourquoi donc la vérification a échouée, que manque-il dans ma requête ?
Merci d’avance pour vos explications !