Кому в поиске заказов принадлежит найденный заказ

Эндпоинт поиска заказов берёт параметры из строки запроса и строит 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 — что спрашивают на самом деле


В этом посте были ссылки, но мы их удалили по правилам Сетки