Django: файл cookie CSRF не установлен в iframe - обходной путь без освобождения csrf - PullRequest
0 голосов
/ 04 декабря 2018

Мой проект развертывает iframes на нескольких сторонних сайтах, которые все известны и зарегистрированы в приложении django.

В этих iframes пользователи могут инициировать некоторые события в форме ajax.Открыв сайт напрямую, все отлично работает.Если я открываю сторонний сайт, содержащий iframe, django выдает ошибку после запуска события ajax (403), говоря, что CSRF не удалось.

В форме, которую я использовал, {% csrf_token%}, которая установленав HTML.Однако он не устанавливает соответствующий файл cookie при вызове сайта через iframe (обнаружил оба в режиме проверки в браузере).

Я знаю, что могу использовать декоратор @csrf_exempt, но это отключитcsrf-protection all-in-one, что я не хочу делать.

Итак, мои вопросы:

  1. Почему django не устанавливает файл cookie CSRF, когда вся страницазагружается через iframe?
  2. Можно ли заставить django установить cookie или можно только исключить известные URL-адреса из csrf?
  3. Есть ли способ, которого я не вижу?

Большое спасибо за ваше время!:)

1 Ответ

0 голосов
/ 20 января 2019

Это то, что я изменил в своем файле settings.py, чтобы что-то похожее работало:

X_FRAME_OPTIONS = 'ALLOW-FROM example.com'
CSRF_TRUSTED_ORIGINS = ['example.com']
CSRF_COOKIE_SAMESITE = None

Где example.com - это домен, в который вы вставляете iframe.Последний вариант был введен совсем недавно в Django, поэтому в зависимости от вашей версии он может не понадобиться.

...