Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Validation CSRF avec Django
Le CSRF (Cross-Site Request Forgery) est une attaque ou un site malveillant fait des requêtes en ton nom. Django se protege automatiquement avec un token CSRF : un code secret génère pour chaque session, qui doit etre present dans chaque formulaire POST.
Django utilise le module django.middleware.csrf pour ca. On peut générer un token avec get_token() et vérifier un token avec _sanitize_token().
Mais pour comprendre le mecanisme, on va le reimplémenter en utilisant les outils de Django.
Le module secrets de Python fournit token_hex() pour générer des tokens cryptographiquement surs (bien mieux que random) :
- generate_csrf_token(length=32) : génère un token hexadecimal de length caracteres avec secrets.token_hex(length // 2)
- validate_csrf_token(request_token, session_token) : compare les deux tokens de facon securisee avec hmac.compare_digest (qui previent les attaques par timing). Retourne False si l'un des tokens est vide ou None.
- protect_form_submission(request_data, session_data) : extrait les tokens de request_data['csrf_token'] et session_data['csrf_token'], puis appelle validate_csrf_token