Частая ошибка в кабинетах и CRM: интерфейс скрывает кнопки для обычного пользователя, но API все равно принимает запросы. Внешне права будто работают, но защита держится только на frontend.
Это приводит к редактированию чужих заказов, просмотру чужих файлов, изменению статусов и доступу к данным других компаний.
Коротко: права должны проверяться на сервере для каждого действия, объекта и организации.Почему возникает проблема
Обычно проверки добавили в меню и кнопки, но не перенесли в контроллеры API. Иногда проверяется только факт авторизации, без роли, владельца объекта и принадлежности к компании.
Что проверяю в первую очередь
- что происходит при прямом запросе к API
- проверяется ли роль на сервере
- проверяется ли владелец объекта
- учитывается ли текущая организация
- есть ли тесты на запрет доступа
Как исправляю
Я строю карту действий и объектов, затем добавляю единые проверки в backend, чтобы интерфейс был только удобством, а не единственным барьером.
- добавляю middleware или policy для API
- проверяю роль и владельца объекта
- разделяю права просмотра и редактирования
- возвращаю корректные 403/404
- добавляю тестовые запросы на запрет
Что подготовить перед обращением
- ссылка на сайт или кабинет
- скриншот проблемы
- пример пользователя, заказа или события
- время, когда ошибка повторялась
- доступы или выгрузка логов без лишних персональных данных
Какой результат нужен
Пользователь не может выполнить запрещенное действие даже прямым API-запросом.
Чего лучше не делать
Не полагайтесь на скрытие кнопки, disabled-атрибут или проверку только на странице. Это не защита.
Вопросы и ответы
Нужно ли скрывать кнопки после исправления API?
Да, но только для удобства. Основная защита должна быть на сервере.
Что лучше возвращать: 403 или 404?
Зависит от сценария. Для чужих объектов часто безопаснее не раскрывать их существование.
Можно ли добавить одну общую проверку?
Можно начать с middleware, но права на объект обычно требуют отдельной policy.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот, лог ошибки или пример заказа, и я подскажу, с чего безопасно начать исправление.
Итог
Настоящее разграничение доступа живет в backend. Интерфейс может помогать пользователю, но API обязан проверять права сам.