파라미터를 “|” 로 넘기는 경우에 대해 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="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;" />

상위버전부터 tomcat.util.http.parser.HttpParser.requestTargetAllow 도 Deprecated 되었다고 하며, server.xml 의 relaxedPathChars 와 relaxedQueryChars 에 해당 문자를 추가하여 대응가능합니다.