CSRF (Cross-Site Request forgecy): falsification de requêtes intersites, est une attaque de réseau commun. Qu'est-ce que CSRF et comment défendre?
principe CSRF
FLOW attaque CSRF ci-dessous:
En bref, les attaquants ont volé votre statut juridique, et votre nom pour envoyer des requêtes malveillantes telles que: envoyer votre nom et e-mails, utiliser votre argent pour acheter quelque chose, mettez votre argent du compte ...... conséquences désastreuses.
défense FCRR
la défense CSRF la manière sur les catégories suivantes:
- En referer, code de jeton d'authentification ou soumis par l'utilisateur est détecté.
- Essayez de ne pas exposer des informations de confidentialité des utilisateurs dans la page de liens.
- Pour les utilisateurs de modifier ou de supprimer la meilleure après l'opération d'utilisation.
- Évitez toute station cookie générique, un ensemble strict domaine de cookie.
La solution Django route
middleware Django (CsrfMiddleware) à la protection CSRF. Spécifique fonctionne comme suit:
demande de modification en cours de traitement, ajouter un champ de formulaire caché à toute forme POST, en utilisant le nom csrfmiddlewaretoken, la valeur de hachage ainsi que l'ID de session, d'une clé. Si l'ID de session est pas définie, les résultats intermédiaires ne modifiera pas la réponse, donc une demande de session n'est pas utilisé la perte des performances est négligeable.
Pour toute demande POST entrant contenant la collection cookie de session, il vérifiera s'il csrfmiddlewaretoken et correcte. Dans le cas contraire, l'utilisateur recevra une erreur 403HTTP. 403 contenu de la page d'erreur est détectée demandes inter-domaines camouflage, demande de résiliation.
A noter également que, afin d'éviter demande de conversion non-HTML, les contrôles middleware avant son en-tête Content-Type en réponse aux résultats d'édition. Seulement marqué comme text / html ou application / xml + xhtml page sera modifiée. Vient ensuite l'utilisation.
POST formulaire soumettre le formulaire
1. Ajouter Middleware
Dans MIDDLEWARE_CLASSES settings.py dans le middleware « django.middleware.csrf.CsrfViewMiddleware » plus, il peut être utilisé après avoir ajouté CSRF protection globale (la valeur par défaut a été ajouté);
Vous pouvez également être ajouté à la fonction de vue @csrf_protect contrôle de vue unique, mais ce n'est pas une méthode recommandée, car cela peut manquer.
Remarque: Le middleware doit être effectué après SessionMiddleware, et doit donc figurer dans la liste CsrfMiddleware après SessionMiddleware. En même temps, il faut aussi donner lieu à une réponse au traitement de la réponse avant la compression ou la décompression, et doit donc être effectué après CsrfMiddleware GZipMiddleware.
2. Définir le modèle
{%}% Csrf_token plus la soumission de formulaire POST
Ou une consistance de forme et le format, ajouter sous la forme dans le formulaire
3. La fonction de vue fournie
Il existe trois méthodes couramment utilisées:
csrftoken générés manuellement et appliqués au contexte du modèle:
utilisation RequestContext
rendre directement
CSRF Si vous ne cochez pas la valeur du cookie
L'ajout de la fonction correspondant décorateur @csrf_exempt
Ajax soumet une requête POST
1. paramètres fixés au-dessus
2. Définir le modèle
Il y a deux façons:
html balise script modèle au Canada (Note: Vous ne pouvez pas définir le fichier js)
tête de demande de réglage
plug-ins d'utilisation de cookies
https://github.com/js-cookie/js-cookie/
La première est plus simple.
3. Fonction vue disponible supra
Autre moteur de template (combiné avec jinja2)
1. les paramètres et la fonction de vue fournies ci-dessus
2. Paramètres du modèle
Jinja ne reconnaît pas {%} csrf_token%, à condition comme suit
ou
3. Ibid paramètres d'affichage