Частая ошибка в кабинетах и CRM: интерфейс скрывает кнопки для обычного пользователя, но API все равно принимает запросы. Внешне права будто работают, но защита держится только на frontend.

Это приводит к редактированию чужих заказов, просмотру чужих файлов, изменению статусов и доступу к данным других компаний.

Коротко: права должны проверяться на сервере для каждого действия, объекта и организации.

Почему возникает проблема

Обычно проверки добавили в меню и кнопки, но не перенесли в контроллеры API. Иногда проверяется только факт авторизации, без роли, владельца объекта и принадлежности к компании.

Что проверяю в первую очередь

  • что происходит при прямом запросе к API
  • проверяется ли роль на сервере
  • проверяется ли владелец объекта
  • учитывается ли текущая организация
  • есть ли тесты на запрет доступа

Как исправляю

Я строю карту действий и объектов, затем добавляю единые проверки в backend, чтобы интерфейс был только удобством, а не единственным барьером.

  • добавляю middleware или policy для API
  • проверяю роль и владельца объекта
  • разделяю права просмотра и редактирования
  • возвращаю корректные 403/404
  • добавляю тестовые запросы на запрет

Что подготовить перед обращением

  • ссылка на сайт или кабинет
  • скриншот проблемы
  • пример пользователя, заказа или события
  • время, когда ошибка повторялась
  • доступы или выгрузка логов без лишних персональных данных

Какой результат нужен

Пользователь не может выполнить запрещенное действие даже прямым API-запросом.

Чего лучше не делать

Не полагайтесь на скрытие кнопки, disabled-атрибут или проверку только на странице. Это не защита.

Вопросы и ответы

Нужно ли скрывать кнопки после исправления API?

Да, но только для удобства. Основная защита должна быть на сервере.

Что лучше возвращать: 403 или 404?

Зависит от сценария. Для чужих объектов часто безопаснее не раскрывать их существование.

Можно ли добавить одну общую проверку?

Можно начать с middleware, но права на объект обычно требуют отдельной policy.

Нужна похожая задача?

Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот, лог ошибки или пример заказа, и я подскажу, с чего безопасно начать исправление.

Итог

Настоящее разграничение доступа живет в backend. Интерфейс может помогать пользователю, но API обязан проверять права сам.