파라미터를 “|” 로 넘기는 경우에 대해 tomcat에서 막음.
CVE-2016-6816 관련 에러가 발생할 경우, catalina.properties 에서 tomcat.util.http.parser.HttpParser.requestTargetAllow= | 를 주석 제거함. |
# Allow for changes to HTTP request validation
# WARNING: Using this option will expose the server to CVE-2016-6816
tomcat.util.http.parser.HttpParser.requestTargetAllow=|
해당 에러는 get 방식에서만 발생했고, post 방식이나 restful의 body 형태로 값을 넘기는 경우 필요가 없음.
[Since Tomcat 7.0.76, 8.0.42, 8.5.12 you can define property requestTargetAllow to allow forbiden characters.] 위의 버전부터 처리해당 기능 추가.
추후 여러가지 특수문자에 대한 파라미터를 제거하기 위해 계속 추가된 최종 형태
tomcat.util.http.parser.HttpParser.requestTargetAllow=^_|{}#$%@!:&()[],.^
get 방식에 encoding 없이 바로 넘기는 건 지양해야함. 2번, 3번 동일 특수문자가 encoding 없이 다시 호출되면 CVE-2016-6816 관련 에러가 재발됨.
쿠키 관련 허용에 대한 처리 로직
context.xml 쿠키 관련 허용에 대한 처리해야합니다.
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
참고주소
쿠키를 사용하지 않을 경우에는 해당 기능에 대하여 추가 될 필요 없음.
tomcat 버전업시 해당 부분에 대해 참고!
2020-01-02 년 내용 추가합니다.
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000" URIEncoding="UTF-8"
redirectPort="8443" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" />
상위버전부터 tomcat.util.http.parser.HttpParser.requestTargetAllow 도 Deprecated 되었다고 하며, server.xml 의 relaxedPathChars 와 relaxedQueryChars 에 해당 문자를 추가하여 대응가능합니다.