本文参考了:tomcat隐藏404页面中的版本号__c G的博客-CSDN博客
【起源】
我的服务器上部署了不止一个服务,分别在webapps目录下的app1、app2等,访问时需要在路径中提供具体app序号,比如:https://192.168.1.100/app1/index.jsp,然后发现如果访问者随意访问一个不存在的基础路径例如:https://192.168.1.100/index.jsp,(也就是绕过网站名)则会弹出系统默认的404页面,上面显示了当前Tomcat的服务器版本号。
【隐患】
那就是容易被针对性攻击爆破。
【常规解决方案】
1、修改应用内的web.xml(只适用于网站路径内的无效页 )
该方案资料较常见,但是只能用于访问路径在应用路径内的非正常页面。比如我的网站app1,访问了https://192.168.1.100/app1/aaaaaaaaaaaa.jsp,就会执行自带的404页面。
2、修改tomcat/lib/catalina.jar文件(烦琐并且要有jar工具,伤筋动骨)
先解压,修改\org\apache\catalina\util\ServerInfo.properties,然后重新压缩成jar。
本来操作也没什么难,可惜我在windows环境下执行压缩后的catalina.jar无法正常加载,原因暂时也不明,而CentOS有刚好执行到最后jar命令时无法找到这个jar,都失败了。
其实这个方法在我看来是对原始文件动了手脚,对我的普通应用来说,基本是伤筋动骨的行为。
【终极解决方案】
直接用一个文件搞定。
这个方案就是参考了文章顶部链接的作者资料,在此表示感谢。
方法很简单,在tomcat/lib/目录下,按下方路径创建文件夹和文件(敲重点):
org/apache/catalina/util/ServerInfo.properties
注意:是分别创建org、apache、catalina、util 4个文件夹和ServerInfo.properties文本文件,而不是修改catalina.jar文件!!!不需要额外工具,不需要额外命令。
然后这个ServerInfo.properties文件里面只需要输入server.info=xxxxx,就够了。
来,看看效果吧:
思考:这里填IIS Srv,有没有可能让一部分人感到兴奋,然后迫不及待地打开他们的“IIS-attack”?进一步恼羞成怒地疯狂报复?
【结语】
怎么样?简单而又高效吧?既不用动了catalina.jar文件,又能生效。拿去吧。