Что такое IDOR
Вопрос
Эндпоинт GET /api/invoices/{id} проверяет только, что пользователь вошёл, и отдаёт счёт по id. В чём уязвимость?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- IDOR: перебирая id, читают чужие счета; нужна проверка владельцаправильный ответ
- SQL-инъекция через параметр id, если он подставляется в запрос
- CSRF: чужой сайт заставит браузер пользователя запросить счёт
- Уязвимости нет: пользователь аутентифицирован, значит, ему можно
Разбор
Аутентификация не равна авторизации: вошедший пользователь не должен видеть чужие объекты. Это Insecure Direct Object Reference, частный случай нарушения контроля доступа. Лечится фильтрацией по владельцу в каждом запросе к объекту (get_queryset, where(owner_id == user.id)), UUID вместо последовательных id лишь усложняет перебор, но не заменяет проверку. Целочисленный параметр пути не даёт SQL-инъекции, а CSRF касается действий от имени пользователя через его браузер.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.