Примечания к выпуску 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.