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

10 декабря 2012 г.

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

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

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

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

В ответ на дальнейшие полученные данные и сообщения о продолжающихся проблемах после предыдущего выпуска мы предпринимаем дополнительные шаги для ужесточения проверки заголовка хоста. Вместо того, чтобы пытаться учесть все функции, поддерживаемые HTTP, здесь проверка заголовка Host 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 ©2020 All rights reserved