有人可以告诉我建议采用以下两种方法中的哪一种,以及为什么:
进行必要的更改 ServerInfo.properties
在web.xml中定义“error-page”
答案 0 :(得分:13)
答案有点过时,所以:如果您使用的是tomcat 6或更新版本(我已在tomcat 7上测试过),您可以使用ErrorReportValve以更容易配置的方式实现相同的功能保持。只需将以下行添加到server.xml的Host部分(您应该已经拥有AccessLogValve:
<Valve className="org.apache.catalina.valves.ErrorReportValve"
showReport="false"
showServerInfo="false"/>
通过这种方式,您隐藏了服务器信息和(因为可选的showReport = false)堆栈跟踪。
您可以在Security How To和Error Report Valve的文档中详细了解相关信息。
答案 1 :(得分:4)
我会对ServerInfo.properties进行更改 - 可能还有其他地方可以获取ServerInfo.properties版本信息,而不仅仅是错误页面。 (也许有人会离开默认主页,样本等等,这些可能会有。)
如果需要,可以在Web应用程序中定义错误页面 - 更快的选择可能是通过在CATALINA_HOME / conf / web.xml中指定错误页面来全局更改 - 这将默认使用新指定的错误页面,即使开发人员忘记为他们的应用指定错误页面。
答案 2 :(得分:4)
更改ServerInfo.properties
是最安全的。例如,如果您在http://example.com/contextname
上部署了一个网络应用,那么仍然可以通过404
左右获得http://example.com/blah
。也可以通过使用机器人以不受支持的方法发送请求(返回503
错误页面)以编程方式获取它。
那就是说,老实说,我没有看到任何有效的理由隐藏Tomcat版本。这些信息实际上没有为“普通用户”增加任何价值。它也不会阻止任何黑客尝试一切来降低它或利用安全漏洞(如果有的话......)。他们不担心版本是否显示。对于“普通用户”,我仍然会使用自定义错误页面,该页面在所讨论的webapp风格中更加集成,因此它不那么“可怕”,从而改善了用户体验。