10 декабря 2012
Патч Django 1.4.3 направлен на исправление двух ошибок безопасности в предыдущих версиях ветки 1.4.
Имейте в виду, что этот релиз безопасности немного отличается от предыдущих. Обе ошибки были исправлены в предыдущих обновлениях 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.
2. All of Django’s own built-in views – primarily in the authentication system – which allow user-supplied redirect targets now use is_safe_url to validate the supplied URL.
Mar 31, 2016