Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 12, 2014 20:40:52

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Помогите разобраться с ошибкой Forbidden (403) CSRF verification failed. Request aborted.
Не могу понять в чем проблема.

Офлайн

#2 Фев. 12, 2014 20:48:41

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

<form action="" method="post">{% csrf_token %}
{{ form.as_ul }}
    <button type="submit">Go</button>
{% endblock %}

Все дело в {% csrf_token %}
CSRF это такой тип уязвимости и в Джанго есть механизм защиты от него.
Не хочу повторять, по ссылку есть примеры
http://djbook.ru/ch14s05.html

Отредактировано Singularity (Фев. 12, 2014 20:49:18)

Офлайн

#3 Фев. 13, 2014 20:24:31

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Singularity
Изменил форму в html как вы показали, теперь просто на странице выводится {% csrf_token %} и больше ничего не изменилось. Ошибка при отправке формы так и вылазиет.
Будьте так добры объясните пожалуйста как мне работать с этой защитой от csrf?

Отредактировано d3z0x77+rsmqbc (Фев. 13, 2014 20:26:34)

Офлайн

#4 Фев. 14, 2014 05:58:35

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

CSRF verification failed. Request aborted.

Офлайн

#5 Фев. 14, 2014 06:01:18

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

d3z0x77+rsmqbc
на странице выводится {% csrf_token %}
значит что-то с самим рендернгом шаблонов

Офлайн

#6 Фев. 14, 2014 15:27:35

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Всем хочу выразить благодарность за помощь, проблему вроде как решил, только одна проблема осталась, я не совсем понял, что делает тот код который я вставил. Объясните пожалуйста.
Singularity как вы и говорили я вставил внутрь формы тег {% csrf_token %}, в файле с представлениями я сделал следующие:
1. Импортировал from django.core.context_processors import csrf
2. В представление отвечающие за рендеринг представления написал следующие

def main(request):
    context = {}
    context.update(csrf(request))
    return render_to_response('page1.html', context)

Объясните пожалуйста, что за модуль я импортировал?
Как я понял он отвечает за генерацию данных для скрытого поля, а этой в строке context.update(csrf(request)) как раз генерируется значение для скрытого поля и потом оно заполняется в тег {% csrf_token %}?
И ещё, я вроде где-то читал, что самому не нужно генерировать данные для тега {% csrf_token %} ?

Может быть у меня не правильные настройки в settings.py?

Отредактировано d3z0x77+rsmqbc (Фев. 14, 2014 15:30:25)

Офлайн

#7 Фев. 17, 2014 05:53:22

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

Подключите ‘django.middleware.csrf.CsrfViewMiddleware’, и будет Вам счастье



Офлайн

#8 Фев. 17, 2014 17:21:32

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

FishHook
Так соль то вся в том, что django.middleware.csrf.CsrfViewMiddleware по дефолту включен и если его не отключить или не проделать операции описанные мной выше, то при отправлении post запроса вываливается ошибка.

Офлайн

#9 Фев. 17, 2014 17:27:48

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

CSRF verification failed. Request aborted.

In the corresponding view functions, ensure that the ‘django.core.context_processors.csrf’ context processor is being used. Usually, this can be done in one of two ways

Можете руками передать, либо подключить контекст процессор, второе удобнее? но тогда будет генерироваться на каждый запрос а ведь не всегда на странице есть post.

Отредактировано PanovSergey (Фев. 17, 2014 17:30:29)

Офлайн

#10 Фев. 18, 2014 05:28:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted.

d3z0x77+rsmqbc
FishHookТак соль то вся в том, что django.middleware.csrf.CsrfViewMiddleware по дефолту включен и если его не отключить или не проделать операции описанные мной выше, то при отправлении post запроса вываливается ошибка.
Потому что в контекст нужно передать csrf токен. Он есть в RequestContext.

return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version