Ответ вслух Senior Аутентификация и права обновлено

Как не допустить ошибок контроля доступа

Вопрос

Нарушения контроля доступа годами остаются главной уязвимостью веб-приложений. Как вы системно предотвращаете их в Python-бэкенде?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Начинаю с запрета по умолчанию: в DRF DEFAULTPERMISSIONCLASSES = IsAuthenticated, в FastAPI зависимость текущего пользователя на уровне роутера, а публичные эндпоинты открываю явно.

Что должно прозвучать в ответе

  • Запрет по умолчанию: все эндпоинты требуют вход, публичные открываются явно

  • Доступ к объектам через фильтр по владельцу/тенанту в одном месте

  • Тенант из токена, а не из параметров запроса

  • Единый слой проверки прав (permission-классы, зависимости, политика)

  • Тесты матрицы ролей, в том числе доступ к чужим объектам

  • Проверка прав и в фоновых задачах, админке, экспорте

Что могут спросить следом

  • Почему 404 вместо 403 для чужого объекта?
  • Помогают ли UUID вместо числовых id?

Разбор

Образцовый ответ: «Начинаю с запрета по умолчанию: в DRF DEFAULT_PERMISSION_CLASSES = IsAuthenticated, в FastAPI зависимость текущего пользователя на уровне роутера, а публичные эндпоинты открываю явно. Доступ к объектам строю так, чтобы его нельзя было забыть: все запросы к данным идут через базовый queryset или репозиторий, который уже отфильтрован по организации пользователя, а организация берётся из токена, не из параметров запроса. Чужой объект тогда просто не найдётся и вернётся 404, это заодно не раскрывает его существование. Права на действия описываю в одном слое, permission-классах или политике, а не россыпью if по вьюхам. Обязательно тесты: для каждого эндпоинта проверяю, что пользователь другой организации получает 404, а роль без права получает 403. И не забываю про обходные пути: экспорт в CSV, фоновые задачи, вебхуки, админку, там проверки часто теряются. UUID усложняют перебор, но не заменяют проверку».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме