Структура Django CSRF не может быть отключена и нарушает мой сайт

Средство django csrf не может быть отключено. Я прокомментировал это из своего Middleware моего проекта, но мои логины терпят неудачу из-за отсутствия проблем CSRF. Я работаю из ствола Django. Как CSRF может вызывать проблемы, если он не включен в промежуточном программном обеспечении?

Мне нужно отключить его, потому что на моем сайте много запросов POST, которые CSRF просто ломает. Любая обратная связь о том, как я могу полностью отключить CSRF в проекте магистрали django?

«Новая» CSRF-структура из магистрали Django также нарушает внешний сайт, который входит и выполняет POST по URL-адресу, который я им даю (это часть ненадежного API.) Я не могу отключить CSRF-структуру как Я сказал ранее, как я могу это исправить?

См. Ответы ниже для лучшего решения. Поскольку я написал это, многое изменилось. Теперь есть лучшие способы отключить CSRF.

Я чувствую твою боль. Недопустимо, чтобы инфраструктура меняла такую ​​фундаментальную функциональность. Даже если я хочу начать использовать это с этого момента, у меня есть устаревшие сайты на том же компьютере, где есть копия django. Изменения, подобные этому, требуют пересмотра номера версии. 1.x -> 2.x.

Во всяком случае, чтобы исправить это, я просто прокомментировал это и прекратил обновление Django так часто.

Файл: django / middleware / csrf.py По строке 160:

# check incoming token # request_csrf_token = request.POST.get('csrfmiddlewaretoken', None) # if request_csrf_token != csrf_token: # if cookie_is_new: # # probably a problem setting the CSRF cookie # return reject("CSRF cookie not set.") # else: # return reject("CSRF token missing or incorrect.") 

Да, инфраструктура Django csrf может быть отключена.

Чтобы вручную исключить функцию просмотра из любого промежуточного программного обеспечения CSRF, вы можете использовать декоратор csrf_exempt, найденный в модуле django.views.decorators.csrf. Например: ( см. Doc )

 from django.views.decorators.csrf import csrf_exempt @csrf_exempt def my_view: return Httpresponse("hello world") 

.. и затем удалите {% csrf_token %} внутри форм из вашего шаблона или оставите другие вещи без изменений, если вы не включили их в свои формы.

Вы можете отключить это в промежуточном программном обеспечении.

В settings.py добавьте строку в MIDDLEWARE_CLASSES:

 MIDDLEWARE_CLASSES = ( myapp.disable.DisableCSRF, ) 

Создайте disable.py в myapp со следующим

 class DisableCSRF(object): def process_request(self, request): setattr(request, '_dont_enforce_csrf_checks', True) 

В принципе, если вы задали _dont_enforce_csrf_checks в своем запросе, вы должны быть в порядке.

В общем, вы не должны отключать защиту CSRF, так как это открывает дыры в безопасности. Если вы настаиваете, хотя …

В последнее время появился новый способ защиты CSRF. Ваш сайт случайно настроен на то, чтобы сделать это по-старому? Вот документы для The New Way ™, и вот документы для The Old Way ™ .

Я просто попытался удалить ссылки на classы промежуточного программного обеспечения csrf из моих настроек.py, он сработал. Не уверен, что это приемлемо. Любые комментарии? Ниже были удалены две линии –

  'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware', 

моя версия django – 1.11. промежуточное ПО должно быть таким:

 from django.utils.deprecation import MiddlewareMixin class DisableCSRF(MiddlewareMixin): def process_request(self, request): setattr(request, '_dont_enforce_csrf_checks', True) 
  • Как иметь два разных сайта администратора в проекте Django?
  • Проверка встроенной формы в Django
  • «Недопустимый токен CSRF или неправильный», а параметр post через AJAX в Django
  • Может ли auth_user.username django быть varchar (75)? Как это можно сделать?
  • Ввод формы входа в систему django на каждой странице
  • Django Push HTTP-ответ пользователям
  • В чем разница между django OneToOneField и ForeignKey?
  • Получение объекта «DatabaseOperations» не имеет атрибута «geo_db_type» при выполнении syncdb
  • Django Broken pipe в режиме отладки
  • Django: Получить список полей модели?
  • Как обновить объект из формы редактирования в Django?
  • Давайте будем гением компьютера.