[Spring] 갑자기 POST가 안되는 현상(feat.XSSFilter)

[Spring] 갑자기 POST가 안되는 현상(feat.XSSFilter)

정말 문법을 확인하고 또 확인해도 정확히 썼는데 POST 통신이 되지 않는다면?

설정한 XSS 공격 방어 또는 인터셉터를 의심하세요.

네이버에서 만든 lucy-xss-sax.xml 쓸 경우

HttpServletRequest를 가져가 먼저 작업을 하기 때문에 POST로 데이터를 못 받아온다.

POST 방식으로 전달된 "application/json" 타입의 데이터를 Servlet의 Filter나 Spring의 Interceptor에서 모종의 처리를 하기 위해서는 HttpServletRequest의 InputStream을 읽어 들여야 합니다.

그러나 HttpServletRequest의 InputStream은 한 번 읽으면 다시 읽을 수 없습니다.

왜냐하면 톰캣이 그걸 막습니다.

만약 Interceptor나 Filter에서 InputStream을 읽게 되면, 이후 Spring이 Converter를 이용해 Json 데이터를 바인딩 처리할 때 아래와 같은 에러를 만날 수 있습니다. Spring이 이미 읽어버린 InputStream을 다시 읽으려고 시도하다가 슬픈 에러를 뱉어내는 거죠.

바인딩 예외

1.JSON으로 던졌을 때

java.lang.IllegalStateException: getReader() has already been called for this request org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Stream closed; nested exception is java.io.IOException: Stream closed

2.FORM으로 던졌을 때

14:46:39.691 [http-nio-80-exec-11] WARN j.l.Exception line:23 method:handlerException - org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors

상황 발생

어느 날 갑자기 POST로 보내는 통신은 싹 다 null이 뜨기 시작함

데이터를 바인딩하지 못하는 현상

@RequestMapping(value="manage/postTest.do",method=RequestMethod.POST) public String signUp(HttpServletRequest request){ LOG.warn(request); LOG.warn(request.getParameter("id")); return "/java119.do"; }

로그 출력

14:41:21.964 [http-nio-80-exec-1] WARN c.k.P.o.c.Java119Controller line:39 method:signUp -com.pack.project.XSS.RequestWrapper@61d1d9fa 14:41:21.965 [http-nio-80-exec-1] WARN c.k.P.o.c.Java119Controller line:40 method:signUp - null

요청을 Java119Controller에 보냈는데 HttpServletRequest 객체는 뜬금없이 XSS 설정해둔 패키지를 바라보고 있음

XSS 설정 의심 시작

필자가 사용한 XSS는 네이버 선배 형님들이 만든 lucy-xss-servlet-filter입니다.

git 주소 : https://github.com/naver/lucy-xss-servlet-filter

다시 보니

Recommendation 신규로 개발하는 서비스에는 lucy-xss-servlet-filter를 사용하는 것을 추천하지만, 기존 잘 운영되는 시스템에 lucy-xss-servlet-filter를 사용하는 것은 추천하지 않습니다. 입력 파라메터가 전부 필터링 되기 때문에 서비스가 잘 동작하지 않는 의도치 않은 결과가 발생할 수 있기 때문입니다.

라고 써져있었네요.. 죄송합니다 네이버 선배님들

web.xml에 설정해둔 XSS Filter 주석 처리 후 POST 테스트 부분

결과 : 아주 잘 됩니다.

아무리 POST가 안 되는 이유, 갑자기 POST 안됨, POST 통신 먹통, POST 무조건 null 등등

검색해봐도 찾을 수가 없었는데

역시 검색에 너무 의존하는 것도 문제인 거 같습니다.

꼭 XSSFilter 아니더라도 POST가 되지 않는다면 뭔가가 가로채고 있다는 뜻입니다.

그런 것을 잘 확인해보시고 즐 코 하세요~

XSSFilter를 적용하면서 POST를 하시고 싶으신 분들은 참고 자료

from http://java119.tistory.com/79 by ccl(A) rewrite - 2020-03-15 14:20:27

댓글

이 블로그의 인기 게시물

데이터 바인딩 추상화 - propertyEditor

[샤니마스 SPRING PARTY2020] THE IDOLM @ STER SHINY COLORS SPRING...

Spring Web Form