You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
인증이 필요 없는 공개 GET 엔드포인트 일부에서 입력 검증이 누락되어, 잘못된 파라미터가 서비스 계층까지 도달한 뒤 예외로 터진다. 결과적으로 400이 아닌 500이 반환되고 미처리 500 critical 알림이 발생한다.
레이트 리밋이 없어 외부에서 반복 호출만으로 알림을 지속 발생시킬 수 있다.
BulletinBoardController에 클래스 레벨 @Validated 추가 및 page 파라미터에 @Min(0) 적용
@Latitude/@Longitude의 NaN·Infinity 관통 문제 해결
동일 패턴이 적용되는 인증 경로(MySpotController, SavedSpotController) 및 요청 DTO(CreateMySpotRequest)의 위경도 필드도 함께 점검
위 재현 케이스에 대한 @WebMvcTest 검증 추가
비고사항
페이징 파라미터 검증은 SpotController, MySpotController, SavedSpotController, AddressSearchController에는 이미 @Validated + @Min이 적용되어 있으며 BulletinBoardController만 누락된 상태다.
NaN/Infinity는 Spring의 String → Double 변환을 예외 없이 통과한다. 이후 Hibernate Validator의 @Digits가 내부에서 new BigDecimal("NaN")을 호출하며 실패하는데, 이때 발생하는 예외는 ConstraintViolationException이 아니라 jakarta.validation.ValidationException(HV000028)이라 기존 핸들러에 잡히지 않는다. hibernate-validator 9.0.1 + spring-core 7.0.5 환경에서 재현을 확인했다.
@DecimalMin/@DecimalMax만으로는 NaN이 통과하므로 유한값 제약이 별도로 필요하다.
인증이 필요 없는 공개 GET 엔드포인트 일부에서 입력 검증이 누락되어, 잘못된 파라미터가 서비스 계층까지 도달한 뒤 예외로 터진다. 결과적으로 400이 아닌 500이 반환되고 미처리 500 critical 알림이 발생한다.
레이트 리밋이 없어 외부에서 반복 호출만으로 알림을 지속 발생시킬 수 있다.
재현
curl 'https://pickflow-api.us/api/v1/bbs/posts?masterId=1&page=-1'→ 500BulletinBoardService의PageRequest.of(page, ...)가IllegalArgumentException을 던진다 (기대: 400)curl 'https://pickflow-api.us/api/v1/spots/1/preview?latitude=NaN&longitude=127.0'→ 500curl 'https://pickflow-api.us/api/v1/spots?sort=DISTANCE&latitude=Infinity&longitude=127.0'→ 500curl 'https://pickflow-api.us/api/v1/spots/viewport?topLeftLat=1e400&...'→ 500작업 내용
BulletinBoardController에 클래스 레벨@Validated추가 및page파라미터에@Min(0)적용@Latitude/@Longitude의NaN·Infinity관통 문제 해결MySpotController,SavedSpotController) 및 요청 DTO(CreateMySpotRequest)의 위경도 필드도 함께 점검@WebMvcTest검증 추가비고사항
SpotController,MySpotController,SavedSpotController,AddressSearchController에는 이미@Validated+@Min이 적용되어 있으며BulletinBoardController만 누락된 상태다.NaN/Infinity는 Spring의String → Double변환을 예외 없이 통과한다. 이후 Hibernate Validator의@Digits가 내부에서new BigDecimal("NaN")을 호출하며 실패하는데, 이때 발생하는 예외는ConstraintViolationException이 아니라jakarta.validation.ValidationException(HV000028)이라 기존 핸들러에 잡히지 않는다. hibernate-validator 9.0.1 + spring-core 7.0.5 환경에서 재현을 확인했다.@DecimalMin/@DecimalMax만으로는NaN이 통과하므로 유한값 제약이 별도로 필요하다.ValidationException자체에 대한 안전망 핸들러 추가는 Bug: 미처리 표준 예외가 500으로 반환되어 critical 알림 발생 #123 에서 함께 다룬다.