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

20 августа 2014 г.

Django 1.4.14 исправляет несколько проблем безопасности в версии 1.4.13.

reverse()может генерировать URL-адреса, указывающие на другие хосты

В определенных ситуациях реверсирование URL-адресов может создавать относящиеся к схеме URL-адреса (URL-адреса, начинающиеся с двух косых черт), которые могут неожиданно перенаправить пользователя на другой хост. Злоумышленник может воспользоваться этим, например, перенаправив пользователей на фишинговый сайт, предназначенный для запроса паролей пользователей.

Чтобы исправить это, реверсирование URL-адресов теперь гарантирует, что ни один URL-адрес не начинается с двух косых черт (//), заменяя вторую косую черту его эквивалентом в кодировке URL (% 2F). Такой подход гарантирует, что семантика останется прежней, при этом URL-адрес будет относиться к домену, а не к схеме.

Отказ в обслуживании загрузки файла

До этого выпуска передача файлов в Django в конфигурации по умолчанию могла ухудшиться до создания огромного количества os.stat()системных вызовов, когда загружается дублирующееся имя файла. Поскольку stat()может вызывать ввод-вывод, это может привести к огромному замедлению, зависящему от данных, которое со временем постепенно ухудшается. Конечный результат состоит в том, что при наличии достаточного количества времени пользователь, имеющий возможность загружать файлы, может снизить производительность обработчика загрузки, что в конечном итоге приведет к очень медленной загрузке файлов размером 0 байт. На этом этапе даже медленное сетевое соединение и несколько HTTP-запросов - это все, что необходимо, чтобы сделать сайт недоступным.

Мы устранили проблему, изменив алгоритм генерации имен файлов, если файл с загруженным именем уже существует. Storage.get_available_name()теперь добавляет знак подчеркивания плюс случайную буквенно-цифровую строку из 7 символов (например "_x3a1gho"), а не повторяет символ подчеркивания, за которым следует число (например "_1", "_2"и т. д.).

RemoteUserMiddlewareзахват сеанса

При использовании RemoteUserMiddleware и RemoteUserBackendизменение REMOTE_USERзаголовка между запросами без промежуточного выхода из системы может привести к тому, что предыдущий пользовательский сеанс будет кооптирован последующим пользователем. Промежуточное ПО теперь выводит пользователя из системы при неудачной попытке входа в систему.

Утечка данных через манипуляции со строкой запроса в contrib.admin

В более старых версиях Django можно было раскрыть данные любого поля, изменив параметры «всплывающее окно» и «to_field» строки запроса на странице формы изменения администратора. Например, запрос URL-адреса /admin/auth/user/?pop=1&t=passwordи просмотр HTML-кода страницы позволил просмотреть хэш пароля каждого пользователя. Хотя администратор требует, чтобы пользователи в первую очередь имели разрешения на просмотр страниц формы изменения, это может привести к утечке данных, если вы полагаетесь на пользователей, имеющих доступ для просмотра только определенных полей в модели.

Чтобы решить эту проблему, теперь будет возникать исключение, если to_fieldуказано значение, не связанное с полем модели, зарегистрированной администратором.

Copyright ©2021 All rights reserved