2017-01-22 24 views
4

Большинство ответов SO просят очистить файлы cookie и подтвердить класс промежуточного программного обеспечения. Я уже пробовал это.Различное значение токена csrf в заголовке ответа и куки-файлы браузера. Ошибка csrf в django 1.9

Python - 3,4
Джанго - 1,10
Использование VirtualEnv.

Я получаю ошибку Forbidden (403) CSRF verification failed. Request aborted. на экране входа администратора Django. Я разместил свой сайт на pythonanywhere.com с помощью django версии 1.9.

  • Я очистил cookies браузера. Все они.
  • Я перезагрузил экран входа. Получить запрос.
  • В браузере куки, которые были до сих пор пусто, одно значение было установлено на мой сайт, где значение CSRF является = XPp5hAhylAkt27U4SzGPNU7w8SFBJ3RP enter image description here
  • В заголовке ответа, установите печенье было отправить с печеньем значение = UT24544MghHLZi0IrGHQlCcpk1v0SbCy. Такое же значение было доступно в исходном коде формы. enter image description here
  • Теперь я ввел имя пользователя и пароль и нажмите кнопку входа.
  • Поступила ошибка 403 Ошибка проверки CSRF. Запрос прерван.
  • Я перепроверял все значения токена csrf.
  • В заголовке запроса значений CSRF печеньем = XPp5hAhylAkt27U4SzGPNU7w8SFBJ3RP enter image description here
  • В значениях CSRF форма данных = UT24544MghHLZi0IrGHQlCcpk1v0SbCy enter image description here

  • У меня уже есть 'django.middleware.csrf.CsrfViewMiddleware', в классах промежуточного программного обеспечения. Я очистил кеш браузера и файлы cookie. Даже перезапустили систему.

Я использовал точно такой же код на другом сайте, где он работает отлично.

Почему существуют разные значения знака csrf? Каково решение этой проблемы?

update 1: Если я устанавливаю debug = False в настройках, он отлично работает. Но я не могу сохранить его, поскольку код жив.

update 2: После дальнейших исследований выяснилось, что некорректное значение cookie csrftoken браузера не установлено для правильного значения, которое передается в заголовке ответа. Если я удалю и cookie из браузера, а затем настрою его на правильное значение с консоли, будут выполняться почтовые запросы.

update 3: Теперь такая же проблема происходит с каждым запросом на отправку или отправкой формы, которую я делаю в своем веб-приложении. Значение токена CSRF, отправленное в заголовке ответа и исходном коде, не совпадает с значением, установленным в cookie браузера.

обновление 4: настройка CSRF_COOKIE_NAME = "csrf_token" также не помогла.

+0

Вы фактически помещаете токен CSRF в свою форму? – Glenn

+0

Привет Глен, это админ-модуль, поэтому любая форма, созданная внутри модуля администратора, должна иметь токен csrf. – User42

+0

Вы установили CSRF_COOKIE_SECURE в True, возможно? – zxzak

ответ

6

Неожиданное значение для токена CSRF устанавливается, когда браузер пытается получить значок.

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

Запрос на загрузку страницы: enter image description here

Запрос загрузки фавиконки: enter image description here

Вы можете исправить эту конкретную ошибку, гарантируя, что Favicon существует.

Обратите внимание, что эта ошибка будет возвращаться всякий раз, когда какой-либо ресурс, который вы связываете (например, изображение), не существует, потому что ваше приложение отображает главную страницу вместо того, чтобы возвращать ошибку 404.

+0

Большое спасибо Даниэлю. Я использую представление HomePage для обработки ошибочных URL-адресов. Возможно ли, что домашняя страница загружается, когда кто-то вводит неправильный URL-адрес, но просто игнорирует, когда изображения не найдены. – User42

+1

Хорошее решение зависит от того, как вы реализовали этот резерв. Вероятно, лучше всего задать новый вопрос. В качестве обходного пути вы можете проверить свое представление «HomePage», если 'request.path' начинается с'/static/'и возвращает ответ 404. –

+0

О, боже мой, спасибо, что опубликовали это. Я пытаюсь отсортировать эту ошибку в течение нескольких дней, и это абсолютно заглохло меня. Не могу поверить, что это было что-то вроде этого, которое вызывало ошибку. –

Смежные вопросы