[에러] org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String "%3B"

2024. 5. 16. 17:06에러 창고

728x90
SMALL

[Reason]

api url을 호출할 때 "%3B" 라고 하는 블랙리스트 텍스트가 포함되어 요청이 거절되었다는 의미의 에러이다.

사실 이 해당 에러가 발생된다고 하더라도 api 호출은 정상적으로 실행이 가능하다.

 

 

[Solution]

이 에러는 다른 개발자 분의 방법을 통해 해결하고자 하였다.

aop를 통해 api를 호출할 때 먼저 선행적으로 doFilter를 가로채서 해당 요청에 대한 블랙 리스트 텍스트를 잡아 발생되는 해당 에러를 익셉션으로 빠지게끔 하는 것이다.

 

(1)

aop 디펜던시를 추가해준다.

 

 

(2)

@Slf4j
@Aspect
@Component
public class AopConfig {

    @Around("execution(public void org.springframework.security.web.FilterChainProxy.doFilter(..))")
    public void handleRequestRejectedException (ProceedingJoinPoint pjp) throws Throwable {
        try {
            pjp.proceed();
        } catch (RequestRejectedException exception) {
            HttpServletResponse response = (HttpServletResponse) pjp.getArgs()[1];
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        }
    }
    
}

aop 를 만들어준다.

앞서 org.springframework.security.web.FilterChainProxy.doFilter(..) 를 Around로 선행적으로 잡아 ProceedingJoinPoint, 즉, doFilter의 조인 포인트에 발생되는 해당 에러를 잡아 exception으로 빼서 Response에 error라고 알려주게끔 틀어주는 것이다.

728x90
반응형
LIST