Как не допустить ошибок контроля доступа
Вопрос
Нарушения контроля доступа годами остаются главной уязвимостью веб-приложений. Как вы системно предотвращаете их в Python-бэкенде?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Запрет по умолчанию: все эндпоинты требуют вход, публичные открываются явно
Доступ к объектам через фильтр по владельцу/тенанту в одном месте
Тенант из токена, а не из параметров запроса
Единый слой проверки прав (permission-классы, зависимости, политика)
Тесты матрицы ролей, в том числе доступ к чужим объектам
Проверка прав и в фоновых задачах, админке, экспорте
Что могут спросить следом
- Почему 404 вместо 403 для чужого объекта?
- Помогают ли UUID вместо числовых id?
Разбор
Образцовый ответ: «Начинаю с запрета по умолчанию: в DRF DEFAULT_PERMISSION_CLASSES = IsAuthenticated, в FastAPI зависимость текущего пользователя на уровне роутера, а публичные эндпоинты открываю явно. Доступ к объектам строю так, чтобы его нельзя было забыть: все запросы к данным идут через базовый queryset или репозиторий, который уже отфильтрован по организации пользователя, а организация берётся из токена, не из параметров запроса. Чужой объект тогда просто не найдётся и вернётся 404, это заодно не раскрывает его существование. Права на действия описываю в одном слое, permission-классах или политике, а не россыпью if по вьюхам. Обязательно тесты: для каждого эндпоинта проверяю, что пользователь другой организации получает 404, а роль без права получает 403. И не забываю про обходные пути: экспорт в CSV, фоновые задачи, вебхуки, админку, там проверки часто теряются. UUID усложняют перебор, но не заменяют проверку».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как вы спроектируете аутентификацию в API
Следующий вопрос
Перебор пользователей через форму входа