Выбор ответа Senior Авторизация: IDOR, RBAC, ABAC обновлено
Изоляция арендаторов
Вопрос
В SaaS данные всех клиентов в одной базе с колонкой tenant_id. Какая мера лучше всего защищает от утечки между клиентами при ошибке разработчика?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: RLS в PostgreSQL с политикой по tenantid из контекста сессии плюс фильтр в слое данных. RLS применяет фильтр на уровне базы, даже если разработчик забыл условие в запросе: это глубокая оборона.
Варианты ответа
- Обязательное ревью каждого SQL-запроса вторым разработчиком с чек-листом по tenant_id
- Шифровать tenant_id в токене, чтобы клиент не мог подставить идентификатор чужого клиента
- RLS в PostgreSQL с политикой по tenant_id из контекста сессии плюс фильтр в слое данныхправильный ответ
- Передавать tenant_id из тела запроса в каждый вызов репозитория и логировать его
Разбор
RLS применяет фильтр на уровне базы, даже если разработчик забыл условие в запросе: это глубокая оборона. Ревью полезно, но людям свойственно ошибаться. Шифрование идентификатора ничего не меняет. tenant_id из тела запроса контролирует клиент, его надо брать из аутентифицированного контекста.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.