#### 背景
最近,我负责的一个导航的项目被检测出了一些tomcat漏洞,其中有一项是tomcat在错误页面中包含了版本信息。如图所示,这个错误页面就显示了tomcat的版本为8.5.51。检测方给出的理由是攻击者会根据版本相应的tomcat漏洞攻击服务器(还真是这么回事,比如前段时间的AJP协议漏洞),所以安全起见,在部署tomcat时就应该隐藏tomcat的版本信息。通过一番查阅,本文给出两种方法。

#### 通过定义错误页面从而避免版本号泄露
首先定义相应错误的错误页面,然后在tomcat的web.xml配置文件中添加error-page标签,并指定错误代码所对应的错误页面的位置
```xml
<error-page>
<!--出现404错误后转向404_error.jsp页面-->
<error-code>404</error-code>
<location>/404_error.jsp</location>
</error-page>
<error-page>
<!--出现400错误后转向400_error.jsp页面-->
<error-code>400</error-code>
<location>/400_error.jsp</location>
</error-page>
<error-page>
<!--出现500错误后转向500_error.jsp页面-->
<error-code>500</error-code>
<location>/500_error.jsp</location>
</error-page>
```
其实这种方法并没有从根本上解决tomcat版本号泄露问题,只是重定向了错误页面。在有的非错误页面上,还会包含tomcat的版本信息,比如tomcat的默认欢迎页面。
#### 修改tomcat的ServerInfo.properties文件
进入tomcat安装目录下的lib目录,通过unzip命令解压catalina.jar包。
然后将org/apache/catalina/util/目录下的ServerInfo.properties文件信息修
```
server.info=Apache Tomcat/8.5.51
server.number=8.5.51.0
server.built=Aug 14 2019 22:21:25 UTC
```
改为
```
server.info=Apache Tomcat
server.number=0.0.0.0
server.built=Aug 14 2019 22:21:25 UTC
```
保存后将修改后的ServerInfo.properties文件压入catalina.jar中,重启tomcat。
```
[root@miantiao apache-tomcat-8.5.45]# cd lib
[root@miantiao lib]# unzip catalina.jar
.
.(省略解压过程)
.
[root@miantiao lib]# vim org/apache/catalina/util/ServerInfo.properties
[root@miantiao lib]# jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties
adding: org/apache/catalina/util/ServerInfo.properties(in = 886) (out= 514)(deflated 41%)
[root@miantiao lib]# ./../bin/startup.sh
```
然后访问tomcat默认欢迎界面和错误界面,都不会再包含tomcat版本信息。

参考:[https://www.zengjunpeng.com/?id=37](https://www.zengjunpeng.com/?id=37)

隐藏Tomcat版本信息