Кому в поиске заказов принадлежит найденный заказ
Эндпоинт поиска заказов берёт параметры из строки запроса и строит SQL. На ревью первый вопрос — откуда взялось значение в WHERE: напрямую из query-параметра без привязки к текущему пользователю.
@GetMapping("/orders") public List search( @RequestParam String customerId) { return orderRepository .findByCustomerId(customerId); }
Код рабочий, тесты зелёные. Проблема не в SQL-инъекции — параметр уходит через JPA-репозиторий с биндингом. Проблема в том, что customerId пришёл от клиента, а не из контекста аутентификации. Любой авторизованный пользователь, подставив чужой customerId в query-параметр, получает чужие заказы.
На собесе за этим следует вопрос: как бы вы это исправили, не ломая API для фронтенда, который уже шлёт customerId? Правильный путь — брать customerId из Authentication/Principal на бэкенде и игнорировать значение из запроса, либо сверять его с текущим пользователем и возвращать 403 при несовпадении.
Этот баг не ловится юнит-тестами на логику поиска — он ловится только вопросом «кому принадлежат данные» на этапе ревью.
Тренажёр: 900+ вопросов и задач, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки