• 报错和现象
  • 如何解决
  • 方案对比
  • 首页
  • 归档

tomcat 400错误的解决

  • yuc
  • 2022-01-08
  • 2023-06-01
  • 浏览:782
  • 0

报错和现象

当url中有特殊字符时,高版本tomcat会显示400页面,页面暴露了版本信息和部分堆栈,参考部分报错关键字:

The valid characters are defined in RFC 7230 and RFC 3986

如何解决

主要解决办法有如下几个:

  1. 此报错是高版本tomcat才出现,所以可以更换低版本来解决此问题,但同时需要考虑低版本tomcat是否有其他安全问题
  2. 在tomcat/conf/server.xml的端口配置下增加如下配置:
    relaxedPathChars='\":[]|'
    relaxedQueryChars='\":[]|'

    同时在tomcat/conf/catalina.properties追加如下配置:

    tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
    org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

    但这两个配置文件不能解决所有问题,只能解决部分上面列出的特殊符号问题,如果有一些其他更特殊的符号未添加或者遗漏,那么仍然可能报错

  3. 在tomcat/conf/server.xml的Host标签内加入以下代码:
    <Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />

    这种方式仍然会显示400错误,但不会输出错误堆栈,也算是比较好的解决方案了

方案对比

  1. 方案一需要回退低版本,存在其他安全风险
  2. 方案二使得列出的字符可以被正常请求,与高版本tomcat禁止这些字符来提升安全相背离
  3. 方案三是仍然禁止这些字符,但仅不显示版本和错误堆栈,可以保证服务安全
© 2023
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}