La vérification du CSRF a échoué. Demande abandonnée. sur django
Je suis Django 1.3 Développement Web. et pour les connexions, j'obtiens l'erreur suivante
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
C'est mon settings.py applications incluses. C'est exactement ce que le livre dit qu'il devrait être.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'djangocricket.Cricket',
'djangocricket.cms'
)
le livre dit, il devrait contenir, django.contrib.auth.vue.connexion. . et je suis notamment en
urlpatterns = patterns('',
# Examples:
url(r'^$', 'djangocricket.Cricket.views.index', name='default'),
url(r'^user/(w+)/$', 'djangocricket.Cricket.views.user_home', name='user home'),
url(r'^login/$', 'django.contrib.auth.views.login'),
# url(r'^djangocricket/', include('djangocricket.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
#url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^news/', 'djangocricket.cms.views.index', name='index'),
#url(r'^news/(?P<slug>[^.]+).html', 'djangocricket.cms.views.detail', name='get_single_news_item'),
url(r'^admin/', include(admin.site.urls)),
)
et mon inscription/connexion.HTML. .. copie-collé à partir du livre. il devrait faire.
<html>
<head>
<title>Django Bookmarks - User Login</title>
</head>
<h1>User Login</h1>
{% if form.errors %}
<p>Your username and password didn't match.
Please try again.</p>
{% endif %}
<form method="post" action=".">
<p><label for="id_username">Username:</label>
{{ form.username }}</p>
<p><label for="id_password">Password:</label>
{{ form.password }}</p>
<input type="hidden" name="next" value="/" />
<input type="submit" value="login" />
</form>
</body>
</html>
ce qui me manque?
5 réponses
Vous devez ajouter le {% csrf_token %}
balise de modèle en tant qu'enfant de l' form
élément dans votre modèle Django.
de cette façon, le modèle affichera un élément caché avec la valeur définie au jeton CSRF. Lorsque le serveur Django reçoit la demande de formulaire, Django vérifiera que le jeton correspond à la valeur qui a été rendue dans le formulaire. Cela est nécessaire pour s'assurer que les requêtes POST (c.-à-d. les requêtes de modification de données) proviennent d'une session client authentique.
Pour en savoir plus info, consultez la documentation de Django à: https://docs.djangoproject.com/en/dev/ref/csrf/
voici un aperçu de l'attaque contre la falsification de demandes sur plusieurs sites: https://www.owasp.org/index.php/CSRF
Si vous utilisez csrf_token
modèle de balise, mais pas changer quoi que ce soit, vérifiez CSRF_COOKIE_DOMAIN
paramètre. Vous devez définir None
sur l'environnement de développement.
j'ai eu le même problème. J'ai résolu ce problème en ajoutant le {% csrf_token %}. Enfin, mon code est:
<form id='formulario2' method='post' action='>
<h3>Enter:</h3>
{% csrf_token %}
<input id="id_mesaje" name="mesaje" type="email" placeholder="E-mail"/>
<input type='submit' name="boton2" value='Suscribete' style="display:inline-block;background-color: #80e174; "/>
</form>
voulais Juste donner des infos supplémentaires sur le sujet. Si cela vous arrive et que vous êtes sûr que le token est injecté dans la forme et que les fonctions de vue gèrent tout correctement, le problème persiste. Assurez-vous qu'il n'y a pas de code javascript désactivant les champs d'entrée. Cela m'est arrivé, après quelques heures de débogage, finalement rendu compte que.
<input type="hidden" name="csrfmiddlewaretoken" value="pHK2CZzBB323BM2Nq7DE2sxnQoBG1jPl" disabled="">
Hi il suffit d'utiliser {% csrf_token%} dans votre formulaire.Cela a fonctionné pour moi. Alors pourquoi utilisons-nous la falsification demandée sur plusieurs sites ? Eh bien, la réponse est assez simple, il vient d'ajouter une autre couche de sécurité à votre page web, par laquelle tout utilisateur malveillant ne peut pas valider une demande en utilisant un mauvais token.