Доступ запрещён. Но защищены ли чужие данные?
Редакционная AI-иллюстрация Virusologia. Не скриншот инцидента.

Основа для размышления

OWASP API Security Top 10 описывает риск нарушения авторизации на уровне объекта: приложение должно проверять полномочия пользователя для конкретного объекта.

OWASP API1:2023 — Broken Object Level Authorization

Далее — редакционный разбор и практические рекомендации Virusologia.

Проблема: один ответ не описывает правило

Экран, скрывший кнопку, и ответ сервера 403 ещё не описывают все роли, организации и маршруты. Отдельно важно понимать, кому принадлежит объект и какое действие должно быть разрешено или запрещено. Без этого одинаковые ответы могут означать как корректную защиту, так и ошибочный тест.

Решение: матрица доступа

До проверки согласуйте scope и используйте принадлежащие заказчику тестовые учётные записи и объекты. Для каждой роли и организации запишите ожидаемые действия: собственный объект, объект организации, чужой объект и административная операция. Проверьте положительные и отрицательные сценарии, не обращаясь к чужим данным.

Доказательство вместо предположения

Сравните контрольный результат владельца с результатом другой разрешённой тестовой роли; документируйте условия и время. Для разрешённых изменяющих действий в лаборатории проверьте состояние до и после: отказ в интерфейсе сам по себе не гарантирует, что сервер ничего не изменил.

Где заканчивается уверенность

Если нет второй роли, тестового объекта или спецификации, укажите этот пробел в отчёте. Отсутствие найденных нарушений при неполной матрице не означает доказанной изоляции. Повторите проверку после исправления при сопоставимых условиях.

Пример матрицы ожиданий

Identity        Object             Expected
Owner           own record         allow
Tenant B user   Tenant A record    deny
Viewer          admin operation    deny

Record: scope, test identity, object owner, result, evidence, limitation.