Сбой токена CSRF при попытке подать приложение Django на поддомен - PullRequest
0 голосов
/ 13 февраля 2020

Я успешно настроил два приложения Django на этих доменах соответственно:

http://omerselcuk.engineer

http://visions.omerselcuk.engineer

Они оба хорошо работают с запросами GET, но хотя первый (основной домен) работает с запросами POST, второй (поддомен) - нет. Я могу проверить, правильно ли я включил {% csrf_token %}, потому что я даже не могу войти в админ-панель. (Панель администратора доступна, но не доступна для входа.)

Они оба доступны публично, и отладка второго приложения Django включена, чтобы вы могли проверить себя, если хотите.

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

1 Ответ

0 голосов
/ 13 февраля 2020

Из документов :

Кроме того, для запросов HTTPS CsrfViewMiddleware выполняет строгую проверку реферера. Это означает, что даже если поддомен может устанавливать или изменять файлы cookie на вашем домене, он не может заставить пользователя публиковать в вашем приложении, поскольку этот запрос не будет поступать с вашего собственного точного домена.

Это также относится к атака «человек посередине», которая возможна под HTTPS при использовании секрета, независимого от сеанса, из-за того, что заголовки HTTP Set-Cook ie (к сожалению) принимаются клиентами, даже когда они общаются с сайтом по HTTPS , (Проверка Referer не выполняется для HTTP-запросов, поскольку наличие заголовка Referer недостаточно надежно для HTTP.)

Если задан параметр CSRF_COOKIE_DOMAIN, с ним сравнивается Referer. Этот параметр поддерживает субдомены. Например, CSRF_COOKIE_DOMAIN = '.example.com' разрешит запросы POST от www.example.com и api.example.com. Если параметр не задан, то реферер должен соответствовать заголовку HTTP-хоста.

Расширение принятых рефереров за пределы текущего хоста или домена cookie можно выполнить с помощью параметра CSRF_TRUSTED_ORIGINS.

Последние два абзаца являются важными частями. Вам нужно установить CSRF_COOKIE_DOMAIN = '.omerselcuk.engineer' или установить CSRF_TRUSTED_ORIGINS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...