Примечания к выпуску Django 1.4.3

10 декабря 2012 г.

Django 1.4.3 решает две проблемы безопасности, присутствовавшие в предыдущих выпусках Django серии 1.4.

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

Отравление заголовка хоста

Несколько более ранних выпусков безопасности Django были посвящены проблеме заражения заголовка HTTP Host, в результате чего Django генерировал URL-адреса, указывающие на произвольные, потенциально вредоносные домены.

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

  • Имена хостов должны состоять из символов [A-Za-z0-9]плюс дефис ('-') или точка ('.').
  • IP-адреса - как IPv4, так и IPv6 - разрешены.
  • Порт, если он указан, является числовым.

Теперь любое отклонение от этого будет отклонено, вызывая исключение django.core.exceptions.SuspiciousOperation.

Перенаправить отравление

Также продолжение предыдущей проблемы: в июле этого года мы внесли изменения в классы перенаправления HTTP Django, выполнив дополнительную проверку схемы URL-адреса для перенаправления (поскольку как в собственных приложениях Django, так и во многих сторонних приложениях , принятие заданной пользователем цели перенаправления является распространенным шаблоном).

С тех пор две независимые проверки кода выявили новые потенциальные проблемы. Итак, как и в случае с заголовком Host, мы предпринимаем шаги для обеспечения более строгой проверки в ответ на обнаруженные проблемы (в первую очередь со сторонними приложениями, но в определенной степени также и в самом Django). Он состоит из двух частей:

1. Добавлена ​​новая функция полезности django.utils.http.is_safe_url; эта функция принимает URL-адрес и имя хоста и проверяет, является ли URL-адрес относительным или абсолютным совпадением с предоставленным именем хоста. Эта функция предназначена для использования всякий раз, когда принимаются заданные пользователем цели перенаправления, чтобы гарантировать, что такие перенаправления не могут привести к произвольным сторонним сайтам.

2. Все собственные встроенные представления Django - в первую очередь в системе аутентификации - которые позволяют теперь использовать заданные пользователем цели перенаправления is_safe_urlдля проверки предоставленного URL.

Copyright ©2021 All rights reserved