Короткий ответ
Проверка полномочий должна выполняться на сервере для каждого объекта и операции, с запретом по умолчанию. Особенно внимательно тестируют смену идентификаторов, роли, экспорт, массовые операции и административные API.
Горизонтальное и вертикальное повышение
В первом случае пользователь получает данные другого пользователя того же уровня, во втором — функцию более привилегированной роли. Оба сценария часто начинаются с изменения ID или параметра запроса.
Надёжная модель
Сервер связывает текущую сессию, требуемое действие и конкретный ресурс, а не доверяет роли или owner_id из браузера. Решения о доступе лучше централизовать и покрывать тестами.
Что искать в проверке
Попробуйте чужие идентификаторы, отсутствующие и просроченные токены, прямой вызов скрытого endpoint, изменение метода и пакетный запрос. Фиксируйте как успешные ответы, так и утечки в ошибках.
Чек-лист действий
- Опишите роли и разрешённые действия.
- Запрещайте доступ по умолчанию.
- Проверяйте объект на сервере.
- Тестируйте API от разных пользователей.
- Журналируйте отказ и административные действия.
Что часто делают неправильно
- Полагаться на скрытую кнопку.
- Доверять идентификатору владельца из клиента.
- Проверять право только при открытии страницы.
- Возвращать лишние поля до фильтрации.