Моя текущая установка - AngularJS + Django 1.5, и я полностью отбросил использование механизма шаблонов Django (то есть, бэкэнд - это в значительной степени сервер API).Без шаблонов Django + AJAX: обновляется ли токен CSRF Django во время сеанса просмотра?
Поскольку я не использую тег шаблона csrf_token
, Django, в свою очередь, не устанавливает и не отправляет cookie csrftoken
в ответ. Как указано в официальных документах, декоратор ensure_csrf_cookie()
должен использоваться, чтобы заставить украшенный вид отправить файл cookie csrftoken
.
Я применил декоратор ensure_csrf_cookie()
к представлению, которое обслуживает первый запрос GET, который мой веб-клиент вызывает при начальной загрузке. При этом мой веб-клиент получает трюк CSRF и отныне разрешается вызывать небезопасные методы (например, POST) на сервер.
Указанная выше настройка работает нормально, только если токен CSRF остается неизменным до окончания сеанса просмотра.
Вопрос: Обновлен ли токен CSRF от Django во время сеанса просмотра? Если «да», значит ли это, что мне нужно будет применить декоратор ensure_csrf_cookie()
ко всем представлениям, которые у меня есть?
1) Скорее всего, но IMHO это деталь реализации, и я советую полагаться на это поведение. 2) Просто напишите базовый класс Mixin или View, украшенный 'sure_csrf_cookie()' и используйте его в качестве базы для вашего представления API (вероятно, есть много шаблонов, которые вы можете переместить там). –
Thx @PauloScardine. Я согласен с тем, что вы сказали. Будут ли какие-либо последствия для безопасности, если cookie-файл-куранд csrf установлен для всех ответов сервера? – tamakisquare
AFAIK нет никаких последствий для безопасности, и такие рамки, как Django-REST-Framework, делают это - на самом деле вы должны рассмотреть его в следующем проекте, так как он покупает вам такие вещи, как разбиение на страницы, дросселирование и систему фантазийных разрешений. –