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

Добро пожаловать в Django 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 к запросам, которые выглядели как AJAX на основе заголовка X-Requested-With. Веб-фреймворк 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 , демонстрирующий эту технику, и убедитесь, что вы просматриваете документацию для своей версии Django, поскольку точный необходимый код отличается для некоторых более старых версий Django.

Copyright ©2020 All rights reserved