Примечания к выпуску 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 можно было раскрыть данные любого поля, изменив параметры «popup» и «to_field» строки запроса на странице формы изменения администратора. Например, запрос URL-адреса типа /admin/auth/user/?pop=1&t=password и просмотр HTML-кода страницы позволили просмотреть хэш пароля каждого пользователя. Хотя администратор в первую очередь требует, чтобы у пользователей были разрешения на просмотр страниц формы изменений, это может привести к утечке данных, если вы полагаетесь на то, что пользователи имеют доступ для просмотра только определенных полей в модели.
Чтобы решить эту проблему, теперь будет вызываться исключение, если указано значение to_field, которое не является полем, связанным с моделью, зарегистрированной у администратора.