2017-09-21 3 views
2

솔루션 ID (정수)를 기반으로 소위 ProductSolutions를 찾을 수있는 응용 프로그램 용 API를 개발 중입니다.XSS 공격 : 스프링 부트 CRUDRepository에서 예외가 발생 했습니까?

코드는 다음과 같습니다

변환하지 못했습니다

@Repository 
public interface ProductSolutionRepository extends CrudRepository<ProductSolution, String> { 

    public List<ProductSolution> findBySolutionId(@Param("solutionId") int solutionId); 
} 

대신 정수의 문자열로 요청을 전송 (localhost:8080/api/v1/productSolutions/search/findBySolutionId?solutionId=dangerousscript)이 API는 다음과 같은 메시지와 함께 오류를 반환 형식 [java.lang.String]에서 값을 입력하십시오. [@ org.springframework.data.repository.query.Param int] 값이 인 경우 'dangerousscript'; 상자의 예외는 java.lang.NumberFormatException의이다 : 입력 문자열의 경우 : "dangerousscript \" "`

가 크롬과 파이어 폭스 깔끔하게 입력을 탈출하는 (및 스크립트를 실행하지 않음) 것처럼 보이지만

명 \ 여전히 우리의 API가 교차 사이트 스크립팅 공격에 사용될 수도 있습니다.

간단한 해결책은 예외를 던질 때 사용자가 입력 한 내용을 제거하거나 자체 오류 페이지를 만드는 것입니다. 사용자 정의 예외가 발생하도록 스프링 부트를 구성 하시겠습니까?

+0

이것은 사이트 간 스크립팅과 관련이 없습니다. Spring이 정수를 기대하고 예외를 올바르게 반환하는 문자열을 보내려고한다는 것입니다. 정확히 그게 문제가 될지 모르겠군요? – g00glen00b

답변

2

로 메소드를 정의 할 수 있습니다 클래스의은 @ControllerAdvice으로 주석 처리됩니다.

@ResponseBody (이 경우 @RestController을 사용하지 않는 경우)에 주석을 달고 원하는 응답을 직접 반환하거나 올바른 메시지와 함께 예외를 다시 throw 할 수 있습니다.

@ControllerAdvice 
public class RestExceptionControllerAdvice { 

    @ExceptionHandler(NumberFormatException.class) 
    public ErrorResponse handleSearchParseException(NumberFormatException exception) { 
     // do whathever you want 
    } 

} 
관련 문제