Выбор ответа Senior Авторизация: IDOR, RBAC, ABAC обновлено

Изоляция арендаторов

Вопрос

В SaaS данные всех клиентов в одной базе с колонкой tenant_id. Какая мера лучше всего защищает от утечки между клиентами при ошибке разработчика?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: RLS в PostgreSQL с политикой по tenantid из контекста сессии плюс фильтр в слое данных. RLS применяет фильтр на уровне базы, даже если разработчик забыл условие в запросе: это глубокая оборона.

Варианты ответа

  1. Обязательное ревью каждого SQL-запроса вторым разработчиком с чек-листом по tenant_id
  2. Шифровать tenant_id в токене, чтобы клиент не мог подставить идентификатор чужого клиента
  3. RLS в PostgreSQL с политикой по tenant_id из контекста сессии плюс фильтр в слое данныхправильный ответ
  4. Передавать tenant_id из тела запроса в каждый вызов репозитория и логировать его

Разбор

RLS применяет фильтр на уровне базы, даже если разработчик забыл условие в запросе: это глубокая оборона. Ревью полезно, но людям свойственно ошибаться. Шифрование идентификатора ничего не меняет. tenant_id из тела запроса контролирует клиент, его надо брать из аутентифицированного контекста.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.