Примечания к выпуску Django 1.1.3¶
Добро пожаловать в Django 1.1.3!
Это третий выпуск «исправлений ошибок» в серии Django 1.1, улучшающий стабильность и производительность кодовой базы Django 1.1.
За одним исключением, Django 1.1.3 сохраняет обратную совместимость с Django 1.1.2. Он также содержит ряд исправлений и других улучшений. Django 1.1.2 является рекомендуемым обновлением для любой разработки или развертывания, использующей или нацеленной на Django 1.1.
Полную информацию о новых возможностях, обратной несовместимости и устаревших возможностях в ветке 1.1 можно найти в разделе Примечания к выпуску Django 1.1.
Обратные несовместимые изменения¶
Ограниченные фильтры в интерфейсе администратора¶
Административный интерфейс Django, django.contrib.admin
, поддерживает фильтрацию отображаемых списков объектов по полям соответствующих моделей, включая отношения на уровне базы данных. Это реализуется путем передачи аргументов поиска в части строки запроса URL, а опции класса ModelAdmin позволяют разработчикам указывать конкретные поля или отношения, которые будут генерировать автоматические ссылки для фильтрации.
Одной из исторически недокументированных и неофициально поддерживаемых возможностей была способность пользователя, достаточно хорошо знающего структуру модели и формат этих аргументов поиска, изобретать новые полезные фильтры на лету, манипулируя строкой запроса.
Однако было продемонстрировано, что этим можно злоупотреблять для получения доступа к информации за пределами прав администратора; например, злоумышленник с доступом к администратору и достаточным знанием структуры модели и отношений может составить строки запроса, которые - при многократном использовании поиска по регулярным выражениям, поддерживаемого API базы данных Django - откроют конфиденциальную информацию, такую как хэши паролей пользователей.
Чтобы исправить это, django.contrib.admin
теперь будет проверять, что аргументы поиска в строке запроса либо указывают только поля просматриваемой модели, либо пересекают отношения, которые были явно разрешены разработчиком приложения с помощью ранее существовавшего механизма, упомянутого выше. Это обратно несовместимо для тех пользователей, которые полагались на предыдущую возможность вставлять произвольный поиск.