Исправление
1 . включите {% csrf_token %}
внутри тег формы в шаблоне.
2 . если по какой-либо причине вы используете render_to_response
в Django 1.3 и выше, замените его на функцию render
. Заменить это:
# Don't use this on Django 1.3 and above
return render_to_response('contact.html', {'form': form})
С этим:
return render(request, 'contact.html', {form: form})
Функция render
была введена в Django версии 1.3 - если вы используете древнюю версию , например 1.2 или ниже , вы должны использовать render_to_response
с aa RequestContext
:
# Deprecated since version 2.0
return render_to_response('contact.html', {'form': form},
context_instance=RequestContext(request))
Что такое защита CSRF и зачем мне это нужно?
Это атака, при которой враг может заставить ваших пользователей делать такие неприятные вещи, как перевод средств, изменение адреса электронной почты и т. Д .:
Подделка межсайтовых запросов (CSRF) - это атака, которая вынуждает конечного пользователя выполнять нежелательные действия в веб-приложении, в котором они в настоящий момент проходят проверку подлинности. CSRF-атаки специально направлены на запросы об изменении состояния, а не на кражу данных, поскольку злоумышленник не может увидеть ответ на поддельный запрос. С небольшой помощью социальной инженерии (такой как отправка ссылки по электронной почте или в чате) злоумышленник может заставить пользователей веб-приложения выполнить действия по выбору злоумышленника. Если жертва является обычным пользователем, успешная атака CSRF может заставить пользователя выполнять запросы на изменение состояния, такие как перевод средств, изменение адреса электронной почты и т. Д. Если жертва является учетной записью администратора, CSRF может поставить под угрозу все веб-приложение. Источник: Открытый проект безопасности веб-приложений
Даже если вы не заботитесь о подобных вещах, теперь приложение может расти, поэтому лучше всего сохранять защиту CSRF.
Разве защита CSRF не должна быть опциональной?
Это необязательно, но включено по умолчанию (промежуточное программное обеспечение CSRF включено по умолчанию). Вы можете отключить его:
- для конкретного вида, украшая его декоратором
csrf_excempt
.
- для каждого представления путем удаления промежуточного программного обеспечения CSRF из списка промежуточного программного обеспечения по адресу
settings.py
Если вы отключите его для всей системы, вы можете включить его для определенного вида, украсив его декоратором csrf_protect
.