Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 21, 2010 13:52:14

diego
От:
Зарегистрирован: 2010-09-14
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Тема избита но в документации не могу разобраться

мидлваре ‘django.middleware.csrf.CsrfViewMiddleware’ в сетинги добавил. GET работал, а вот POST чтото никак
выдайт вот такое

Forbidden (403)

CSRF verification failed. Request aborted.
Help

Reason given for failure:

No CSRF or session cookie.


In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:

* The view function uses RequestContext for the template, instead of Context.
* In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
* If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.

You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed.

You can customize this page using the CSRF_FAILURE_VIEW setting.
view.py
def contact(request):
if request.method == 'POST':
form=ContactForm(request.POST)
if form.is_valid():
cd=form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email','noreply@yande.com'),
['dieego6@gmail.com'],
)

return HttpResponseRedirect('/contact/thanks/')
else:
form=ContactForm()
return render_to_response('contact_form.html',{'form':form})
contact_form.html
<html>
<head>
<title>
Свяжитесь с нами
</title>
</head>
<body>
<h1>
Свяжитесь с нами
</h1>
{%if form.errors %}
<p style="color: red;">
Исправьте следующие ошибки{{form.errors|pluralize}}
</p>
{%endif%}

<form action="" method="post">{% csrf_token %}
<table>
{{form.as_table}}
</table>
<input type="submit" value="Отправить">
</form>


</body>
</html>
в чём косяк?



Офлайн

#2 Дек. 21, 2010 14:28:57

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Сессии включены?



Офлайн

#3 Дек. 21, 2010 14:51:49

diego
От:
Зарегистрирован: 2010-09-14
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Александр Кошелев
Сессии включены?
если вы имеете ввиду мидлваре ‘django.contrib.sessions.middleware.SessionMiddleware’ то да, была добавлена

upd:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',

)



Отредактировано (Дек. 21, 2010 14:58:31)

Офлайн

#4 Дек. 22, 2010 09:04:15

anbu
От:
Зарегистрирован: 2010-12-17
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

diego
Александр Кошелев
Сессии включены?
если вы имеете ввиду мидлваре ‘django.contrib.sessions.middleware.SessionMiddleware’ то да, была добавлена

upd:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',

)
попробуй закоментировать
'django.middleware.csrf.CsrfViewMiddleware',
сам сталкивался с подобной проблемой. отключение csrf помогло, но лучше ознакомиться с http://docs.djangoproject.com/en/dev/ref/contrib/csrf/ , а то сайт становится более уязвимым



Офлайн

#5 Дек. 22, 2010 11:22:10

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

anbu
Вы бы начало топика прочитали, что ли.

diego
Или добавить ‘django.middleware.csrf.CsrfResponseMiddleware’ в настройки, или можно добавить токен в пост запрос:

<form action="..." method="POST">{% csrf_token %}
...
</form>

Отредактировано (Дек. 22, 2010 11:31:49)

Офлайн

#6 Дек. 22, 2010 12:50:41

anbu
От:
Зарегистрирован: 2010-12-17
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Ferroman
anbu
Вы бы начало топика прочитали, что ли.
Название топика: CSRF verification failed. Request aborted.

У меня была такая же проблема, я закоментировал строчку ‘django.middleware.csrf.CsrfViewMiddleware’,

#'django.middleware.csrf.CsrfViewMiddleware',
мне просто тогда не охота было с CSRF разбираться, мне всего лишь нужно было быстренько потестировать свое приложение, поэтому и закоментировал строчку.
так же по теме выложил ссылку, где, как раз, было то что Вы написали ниже моего поста:
<form action="" method="post">{% csrf_token %}
впрочем, не мне с Вами тягаться в знаниях, просто я подсказал один из вариантов решения проблемы.

просто если CSRF стоит в настройках, а его не использовать, то он ругается и выдает ошибку)



Отредактировано (Дек. 22, 2010 13:14:02)

Офлайн

#7 Дек. 22, 2010 14:32:07

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

anbu
Чуть дальше названия прочитайте. Человек сознательно пытается добавить CSRF, и у него с этим проблемы, а Вы ему предлагаете её отключить.

Офлайн

#8 Дек. 22, 2010 14:37:34

anbu
От:
Зарегистрирован: 2010-12-17
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

все, понял.. немного не внимательно прочитал пост, извиняюсь :)
в глаза сразу бросились ошибка и код



Офлайн

#9 Дек. 22, 2010 15:31:31

diego
От:
Зарегистрирован: 2010-09-14
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

anbu и Ferroman спасибо

Ferroman
anbu
Вы бы начало топика прочитали, что ли.

diego
Или добавить ‘django.middleware.csrf.CsrfResponseMiddleware’ в настройки, или можно добавить токен в пост запрос:
<form action="..." method="POST">{% csrf_token %}
...
</form>
1. Добавление одного токена {% csrf_token %} я так понял не решает проблему, следить за подменой нужно всё равно?

2. Или наличие токена {% csrf_token %} свидетельствует о том что запрос пришёл с внутреннего url и этого для простенькой защиты достаточно?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version