• 3.2
  • 5.0
  • 6.1
  • Версия документации: 3.1

Примечания к выпуску Django 1.1.4

Добро пожаловать в Джанго 1.1.4!

Это четвертый выпуск с исправлением ошибок в серии Django 1.1, улучшающий стабильность и производительность кодовой базы Django 1.1.

За одним исключением, Django 1.1.4 поддерживает обратную совместимость с Django 1.1.3. Он также содержит ряд исправлений и других улучшений. Django 1.1.4 — рекомендуемое обновление для любой разработки или развертывания, в настоящее время использующего или ориентированного на Django 1.1.

Полную информацию о новых функциях, обратной несовместимости и устаревших функциях ветки 1.1 см. в документе Примечания к выпуску Django 1.1.

Нарушение обратной совместимости

Исключение CSRF для запросов AJAX

Django включает механизм защиты CSRF, который использует токен, вставляемый в исходящие формы. Затем промежуточное программное обеспечение проверяет наличие токена при отправке формы и проверяет его.

До Django 1.2.5 наша защита CSRF делала исключение для запросов AJAX по следующим причинам:

  • Многие наборы инструментов AJAX добавляют заголовок X-Requested-With при использовании XMLHttpRequest.

  • Браузеры имеют строгие политики одинакового происхождения в отношении XMLHttpRequest.

  • В контексте браузера единственный способ добавить пользовательский заголовок такого типа — это использовать XMLHttpRequest.

Поэтому для простоты использования мы не применяли проверки CSRF к запросам, которые на основе заголовка X-Requested-With выглядели как AJAX. Веб-фреймворк Ruby on Rails имел аналогичное исключение.

Недавно инженеры Google сообщили членам команды разработчиков Ruby on Rails о сочетании плагинов браузера и перенаправлений, которые могут позволить злоумышленнику предоставлять собственные HTTP-заголовки при запросе к любому веб-сайту. Это может привести к тому, что поддельный запрос будет выглядеть как запрос AJAX, тем самым нарушая защиту CSRF, которая доверяет запросам AJAX того же происхождения.

Майкл Козиарски из команды Rails обратил на это наше внимание, и мы смогли предоставить доказательство концепции, демонстрирующее ту же уязвимость в обработке CSRF в Django.

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

Кроме того, Django теперь будет принимать токен CSRF в пользовательском HTTP-заголовке X-CSRFTOKEN, а также в самой отправке формы, для удобства использования с популярными инструментами JavaScript, которые позволяют вставлять пользовательские заголовки во все запросы AJAX.

См. документацию CSRF, например, код jQuery <csrf-ajax>, который демонстрирует этот метод. Убедитесь, что вы просматриваете документацию для вашей версии Django, поскольку точный необходимый код отличается для некоторых старых версий Django.

Back to Top