О релизе Django 1.3.5

10 декабря 2012

Django 1.3.5 закрывает сразу 2 ошибки безопасности в предыдущих версиях ветки 1.3.

Имейте в виду, что этот релиз безопасности немного отличается от предыдущих. Обе ошибки были исправлены в предыдущих обновлениях Django. В одном случае мы получили постоянные сообщения о проблемах, а в другом мы решили предпринять дальнейшие шаги, чтобы обновить код Django в ответ на кучу сообщений о потенциальных проблемах из различных источников.

Опасный заголовок Host

В прошлом релизе безопасности рассматривался вопрос об обработке заголовка Host у HTTP-запроса, в результате чего злоумышленник мог сгенерировать URL на свой сервер.

В ответ на всё поступающие сообщения об ошибках мы решили ввести дополнительные ограничения на проверку заголовка Host. Вместо того, чтобы пытаться приспособить все возможности HTTP проверка Host в Django пытается поддерживать меньше, но гораздо более общее подмножество:

  • Hostnames must consist of characters [A-Za-z0-9] plus hyphen (‘-‘) or dot (‘.’).
  • IP адреса – как IPv4, так и IPv6 – разрешены.

  • Порт, если указан, является числом.

В любых других случаях будет вызываться исключение django.core.exceptions.SuspiciousOperation.

Опасный редирект

В дополнение к предыдущей проблеме: в июле мы внесли некоторые изменения в классы, отвечающие за HTTP редирект, которые выполняют дополнительную проверку URL. Это коснулось как внутренних механизмов, так и сторонних, которые используют общий шаблон редиректов.

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

1. A new utility function, django.utils.http.is_safe_url, is added; this function takes a URL and a hostname, and checks that the URL is either relative, or if absolute matches the supplied hostname. This function is intended for use whenever user-supplied redirect targets are accepted, to ensure that such redirects cannot lead to arbitrary third-party sites.

Все встроенные представления – в первую очередь в системе аутентификации – которые используют перенаправление, используют is_safe_url для валидации адреса.