10 декабря 2012
Django 1.3.5 закрывает сразу 2 ошибки безопасности в предыдущих версиях ветки 1.3.
Имейте в виду, что этот релиз безопасности немного отличается от предыдущих. Обе ошибки были исправлены в предыдущих обновлениях Django. В одном случае мы получили постоянные сообщения о проблемах, а в другом мы решили предпринять дальнейшие шаги, чтобы обновить код Django в ответ на кучу сообщений о потенциальных проблемах из различных источников.
В прошлом релизе безопасности рассматривался вопрос об обработке заголовка Host у HTTP-запроса, в результате чего злоумышленник мог сгенерировать URL на свой сервер.
В ответ на всё поступающие сообщения об ошибках мы решили ввести дополнительные ограничения на проверку заголовка Host. Вместо того, чтобы пытаться приспособить все возможности HTTP проверка Host в Django пытается поддерживать меньше, но гораздо более общее подмножество:
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 для валидации адреса.
Mar 31, 2016