Django CSRF для HTTP и HTTPS

У меня есть блог, который работает как по протоколу HTTP, так и по HTTPS, и у меня возникают проблемы с проверкой токена csrf.

Токен CSRF доступен в каждой форме, как и должно быть, но когда я использую HTTP-версию сайта и пытаюсь зафиксировать комментарий, я получаю следующую ошибку.

Запрещено (403) Ошибка проверки CSRF. Запрос прерван.

Ошибка проверки реферера - http://mysite.com/blog/1/ не соответствует https://mysite.com/.

Он отлично работает при просмотре блога через HTTPS.

Кто-нибудь знает, как получить подтверждение, чтобы оно соответствовало обоим?


person Dave    schedule 05.08.2011    source источник


Ответы (2)


Возможно, вы захотите проверить свои настройки, чтобы увидеть, устанавливаете ли вы для параметра CSRF_COOKIE_SECURE значение True.

Это помечает файл cookie как безопасный и не позволяет браузеру принимать его через незащищенное соединение, то есть HTTP.

Чтобы проверить, является ли это источником проблемы, вы можете использовать любое работающее представление и добавить assert False, чтобы получить экран отладки и посмотреть, отправлен ли файл cookie Csrf или нет.

person Thomas Orozco    schedule 06.08.2011
comment
Спасибо за помощь! Я определенно думал, что это так, но на самом деле это было связано с переменными среды, которые я установил с моими параметрами fastcgi, как я писал выше. - person Dave; 08.08.2011

Я понял. Это была проблема с моими параметрами fastcgi

fastcgi_param HTTPS включен;

установка переменной окружения, которая требует включения HTTPS. Когда эта переменная включена, Django выполняет некоторые дополнительные действия для токенов csrf.

person Dave    schedule 08.08.2011
comment
на каком веб-сервере вы запускаете свой сайт? У меня такая же проблема, но я не могу ее решить в настоящий момент. - person Krystian Cybulski; 18.01.2012
comment
Как ты это починил? Вы удалили fastcgi_param? request.is_secure () не работает без него ... - person Soid; 07.05.2012