Сегодня команда Django выпустила несколько релизов -- Django 1.3.4 и Django 1.4.2 -- для исправления дыр в безопасности, о которых нам сообщили.
Всем пользователям рекомендуется провести немедленное обновление.
Заражение заголовка Host
Некоторые части Django, не зависящие от приложений конечного пользователя, используют полные URL, включая доменное имя, которое создаётся из заголовка HTTP Host
. Некоторые атаки направленные на эту часть остаются без контроля Django и и только правильно настроенный веб сервер поможет от них. Документация Django содержит рекомендации такой конфигурации для продвинутых пользователей.
Тем не менее, собственный механизм анализа заголовка Host
в Django уязвим, как было недавно сообщено нам. Анализ заголовка Host
в Django 1.3 и Django 1.4 -- а точнее, django.http.HttpRequest.get_host()
-- некорректно обрабатывал информацию о логине и пароле в заголовке. Таким образом, следующий заголовок Host
принимался бы Django при работе с сайтом "validsite.com":
Host: validsite.com:random@evilsite.com
Используя его, злоумышленник мог заставить части Django -- а точнее, механизм сброса пароля -- сгенерировать и отобразить определённые URL пользователям.
Для решения этой проблемы, логика HttpRequest.get_host()
была изменена. Заголовки Host
, которые содержат потенциально опасное содержимое (например, пары логин/пароль) теперь выбрасывают исключение django.core.exceptions.SuspiciousOperation
.
Документация на опцию HttpOnly
в куке.
Начиная с Django 1.4, куки сессии всегда отправляются с флагом HttpOnly
, который предоставляет дополнительную защиту от кроссайтового скриптинга, запрещая кроссайтовым скриптам доступ к куке сессии.
Несмотря на то, что это не проблема с безопасностью в Django, нам было сообщено, что документация Django 1.4 некорректно описывает эту защиту, что теперь все куки по умолчанию используют метод HttpRequest.set_cookie()
.
Документация Django была соответственно обновлена. Пользователям Django проверить использование set_cookie()
, чтобы удостовериться в правильном использовании флага HttpOnly
.
Версии, которые надо обновить
Проблема с заголовком Host
касается следующих версий Django:
- Django 1.3 (все версии);
- Django 1.4 (все версии);
- Главная ветка разработки Django (скоро станет Django 1.5).
Проблема с документацией на HttpOnly
флаг касается следующих версий Django:
- Django 1.4 (все версии);
- Главная ветка разработки Django (скоро станет Django 1.5).
Решение
На код Django были наложены патчи, во все указанные выше ветки. Каждый патч можно посмотреть:
- Django Development: коммит для заголовка
Host
и коммит для флагаHttpOnly
; - Django 1.4: коммит для заголовка
Host
и коммит для флагаHttpOnly
; - Django 1.3: коммит для флага
HttpOnly
.
Так как ветка разработки Django находится в пре-альфа состоянии, пользователям настоятельно рекомендуется не использовать её на боевых серверах. Если же вы нас не послушали, то следует немедленно обновить Django до HEAD, который содержит все вышеуказанные патчи.
Благодарности
Проблема с заголовком Host
была описана James Kettle. Проблема с описанием флага HttpOnly
была описана Preston Holmes, которые теперь является членом команды Django.
8 comments | Make a comment
Я страшный человек я пользую 1.5 из гита =)
Кто понял жизнь, тот не торопится.
answer to saintbyte
Я страшный человек я пользую 1.5 из гита =)
Я надеюсь не на продакшене?Иначе да, вы страшный человек.
Это фигня , я тут на продакшен поставил из гита сделал django.VERSION - вообще 1.6 кажет =)) И все работает =)
answer to saintbyte
Это фигня , я тут на продакшен поставил из гита сделал django.VERSION - вообще 1.6 кажет =)) И все работает =)
А на сколько % у вас тестами покрыто? Политика изменения api такая, что явно ничего не сломается.
answer to alerion
А на сколько % у вас тестами покрыто? Политика изменения api такая, что явно ничего не сломается.
Как бы там бюджет не тот чтоб тестами покрывать =) А вот джино хостингу пора инструкцию по работе с джанго новую писать.
Видимо у них бюджет не предусматривает обновление инструкции :)
А зачем джино хостингу новую иструкцию писать если старая прекрасно работает. На днях новый домен на джанге открывал в принципе без особых проблем все завелось. Все делал по инструкциям.