XSS Filter와 MultipartFilter

DDEO._.NU·2024년 10월 17일

에러

목록 보기
1/3
post-thumbnail

multipart/form-data으로 데이터를 넘길 경우 XSS Filter를 타지 않는다는 걸 알게되었다. 그래서 MultipartFilter를 먼저 탄 후 XSS Fileter를 탈 수 있도록 lucy-xss-filter를 적용했다.

하지만 데이터를 넘겨줬을 때 request를 request가 한번더 감싼 형태로 넘어와 fileList가 null이 되어버리는 문제가 발생했다!😥

그래서 이리저리 찾아보던 중 MultipartResolver의 alias를 fileMultipartResolver로 변경하고 web.xml에 선언한 MultipartFilter의 init-param을 지워주면 해결이 된다는 글을 보았다!!

<alias name="local.MultiCommonsMultipartResolver" alias="fileMultipartResolver"/>
<!-- multipartResolver를 fileMultipartResolver로 변경 -->

<filter>
        <filter-name>multipartFilter</filter-name>
        <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
        <!-- <init-param>
            <param-name>multipartResolverBeanName</param-name>
            <param-value>fileMultipartResolver</param-value>
        </init-param> --> ##해당 부분 제거😊
</filter>
<filter-mapping>
  <filter-name>multipartFilter</filter-name>
  <url-pattern>*.do</url-pattern>
</filter-mapping>

위처럼 수정한 후 다시 코드를 실행했더니 이제는
com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilterWrapper cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
에러가 발생했다... 하지만 에러를 보면 알 수 있듯이 MultipartHttpServletRequest로 캐스팅할 수 없어 발생한 에러이기 때문에 기존에 파라미터로 받아주던 HttpServletRequest를 MultipartHttpServletRequest로 수정하여 문제를 해결하였다!

이후 코드 정상 작동 확인!

📌 multipart로 데이터를 받을 경우에는 MultipartHttpServletRequest를 사용하는게 그냥 편할 것 같다!
해당 request는 HttpServletRequest를 확장한 인터페이스이기 때문에 별다른 문제가 발생하지 않을 것 같다.

0개의 댓글