Примечания к выпуску Django 1.9.3¶
1 марта 2016 г.
В Django 1.9.3 исправлены две проблемы безопасности и несколько ошибок в версии 1.9.2.
CVE-2016-2512: вредоносное перенаправление и возможная XSS-атака через предоставленные пользователем URL-адреса перенаправления, содержащие базовую аутентификацию.¶
В некоторых случаях Django полагается на ввод пользователя (например, django.contrib.auth.views.login() и i18n) для перенаправления пользователя на URL-адрес «в случае успеха». Проверка безопасности для этих перенаправлений (а именно django.utils.http.is_safe_url()) считала некоторые URL-адреса с базовыми учетными данными аутентификации «безопасными», хотя они не должны быть таковыми.
Например, URL-адрес типа «http://mysite.example.com@attacker.com» будет считаться безопасным, если хостом запроса является «http://mysite.example.com», но перенаправление на этот URL-адрес отправляет пользователя на «attacker.com».
Кроме того, если разработчик полагается на is_safe_url() для обеспечения безопасных целей перенаправления и помещает такой URL-адрес в ссылку, он может пострадать от XSS-атаки.
CVE-2016-2513: перечисление пользователей через разницу во времени при обновлении рабочего коэффициента хэширования паролей.¶
В каждой основной версии Django, начиная с 1.6, количество итераций по умолчанию для PBKDF2PasswordHasher и его подклассов увеличилось. Это повышает безопасность пароля по мере увеличения скорости оборудования, однако это также создает разницу во времени между запросом на вход для пользователя с паролем, закодированным в более старом количестве итераций, и запросом на вход для несуществующего пользователя (который запускает количество итераций хэшера по умолчанию, начиная с Django 1.6).
Это затрагивает только пользователей, которые не вошли в систему с момента увеличения количества итераций. При первом входе пользователя в систему после увеличения количества итераций его пароль обновляется с учетом новых итераций, и разница во времени больше не возникает.
Новый метод BasePasswordHasher.harden_runtime() позволяет хэшерам устранить разрыв во времени выполнения между рабочим фактором (например, итерациями), указанным в существующих закодированных паролях, и рабочим фактором хэшера по умолчанию. Этот метод реализован для PBKDF2PasswordHasher и BCryptPasswordHasher. Количество раундов для последнего хэшера не изменилось со времен Django 1.4, но некоторые проекты могут подклассифицировать его и при необходимости увеличить рабочий коэффициент.
Предупреждение будет выдано для любых сторонних хэшеров паролей, которые не реализуют метод harden_runtime().
Если в вашей базе данных есть разные хэши паролей (например, хэши SHA1 от пользователей, которые не вошли в систему с тех пор, как хэшер по умолчанию переключился на PBKDF2 в Django 1.4), разница во времени запроса на вход для этих пользователей может быть еще больше, и это исправление не устраняет эту разницу (или любую разницу при смене хэшей). Возможно, вы сможете обновить эти хеши, чтобы предотвратить временную атаку в этом случае.
Исправления¶
Проверка пропущенного URL-адреса (новое в версии 1.9), если параметр ROOT_URLCONF не определен (#26155).
Исправлен сбой в PostgreSQL, из-за которого невозможно было использовать
TIME_ZONE=NoneиUSE_TZ=False(#26177).Добавлена системная проверка на конфликты имен запросов скрытых связей (#26162).
Исправлена регрессия для случаев, когда
ForeignObject.get_extra_descriptor_filter()возвращал объектQ(#26153).Исправлена регрессия при поиске
__in=qsдляForeignKeyс установленнымto_field(#26196).Сделаны «forms.FileField» и «utils.translation.lazy_number()» доступными для выбора (#26212).
Исправлена сериализация
RangeFieldиArrayFieldсо значениямиNone(#26215).Исправлен сбой при фильтрации по десятичному знаку в RawQuery (:ticket:26219).
В доменных именах верхнего уровня URL-адресов, проверенных
URLValidator, снова добавлены тире, чтобы исправить регрессию в Django 1.8 (#26204).Исправлены некоторые сбои в работе устаревших прокладок в SimpleTemplateResponse, которые ухудшились в Django 1.9 (#26253).
Исправлен
BoundFieldдля повторного разрешения фрагментов подвиджетов (#26267).Изменено сообщение администратора «отказано в разрешении» в шаблоне входа, чтобы использовать
get_usernameвместоusernameдля поддержки пользовательских моделей пользователей (#26231).Исправлен сбой при передаче несуществующего имени шаблона методу load_template() кэшированного загрузчика шаблонов (#26280).
Экземпляры ContentTypeManager не могут совместно использовать свой кэш (#26286).
Отменено изменение в Django 1.9.2 (#25858), которое не позволяло разрешать относительные ленивые отношения, определенные в абстрактных моделях, в соответствии с
app_labelих конкретной модели (#26186).