注意:本 HOWTO 合并了我的两个独立博客条目中的帖子,这些帖子涉及删除 Apache Tomcat 中的信息泄露漏洞。尽管以 Tomcat 6.0 和 7.0 版本为中心,但这些技术也可以应用于 JBoss。
信息泄露漏洞是向攻击者提供有关 Web 容器或在容器内运行的 Web 应用程序的配置和/或版本详细信息的问题。这些细节引发的担忧是,攻击者掌握的有关您的 Web 应用程序或应用服务器的信息越多,攻击者就越容易想出破坏服务的方法。
安全审计人员和扫描实用程序发现的与 tomcat 相关的最常见的信息泄露漏洞类型是列出服务器类型和服务器版本信息的漏洞。最常报告的两个信息泄露漏洞涉及服务器 HTTP 响应标头中报告的 Tomcat 版本和报告服务器类型和版本详细信息的默认错误页面。
您可以修改您的 tomcat server.xml 并添加一个“ server
”选项并将其设置为您想要的任何内容。server
应该为您正在运行的任何 http 或 ssl 连接器设置该选项。例如,下面是来自示例 server.xml 文件的示例 HTTP 连接器配置:
- <Connector port="8080" maxHttpHeaderSize="8192"
- maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
- enableLookups="false" redirectPort="8443" acceptCount="100"
- connectionTimeout="20000" disableUploadTimeout="true" />
添加server
如下指令:
- <Connector port="8080" maxHttpHeaderSize="8192"
- maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
- enableLookups="false" redirectPort="8443" acceptCount="100"
- connectionTimeout="20000" disableUploadTimeout="true"
- server="Apache Tomcat">
不幸的是,您无法轻松更改配置文件指令,因为默认值已编译到 tomcat 中。可以修改 Tomcat 源代码分发并重新编译,但大多数管理员可能不愿意构建自己的 Tomcat 分发。tomcat 文档建议您设计和部署自己的自定义错误页面,然后修改各种 web.xml 文件,以便使用error-page
指令将用户指向这些自定义错误页面。
如果您的 web 应用程序部署在 ROOT webapp 中,您只需修改位于您的 web.xml 文件$CATALINA_HOME/webapps/ROOT/
目录。如果您将 webapp 部署到 ROOT,任何有效的错误响应都将继承自定义错误。但是,如果使用单独的上下文部署额外的 web 应用程序,这种情况会发生变化。在这些情况下,需要修改每个 webapp 的 web.xml 以指向您的自定义错误页面。例如,如果您在 ROOT webapp 的 web.xml 中设置了自定义错误页面指令,并且没有部署任何单独的 Web 应用程序,则所有 404 将返回 404 自定义错误。如果您部署一个名为“newapp”的应用程序,那么任何发送到 /newapp 的错误请求都需要使用该应用程序的 web.xml 中定义的自定义错误进行处理。在 /newapp 之外发出的错误请求仍将按预期由 ROOT 应用的 web.xml 配置处理,直到您添加额外的 webapp。在这种情况下,
使用将 webapp 部署到 Tomcat ROOT 上下文中的配置并假设您已经开发了自定义错误 500 和 404 页面,您可以将以下内容添加到您的 ROOT Web 应用程序的 web.xml 配置中,该配置通常位于$CATALINA_HOME/webapps/ROOT/
:
- <error-page>
- <error-code>500error-code>
- <location>/errors/500.htmllocation>
- error-page>
- <error-page>
- <error-code>404error-code>
- <location>/errors/404.htmllocation>
- error-page>
通过向您的 tomcat 实例发送对不存在文件的请求进行测试,您的自定义错误页面将改为显示。
为了抑制 Tomcat 6.0 和 7.0 中的 X-Powered-By 标头,您可以对您的 tomcat server.xml 文件进行非常简单的更改。编辑位于${tomcat.home}/conf/中的server.xml文件。将名为xpoweredby的属性添加到 HTTP 连接器部分并将其值设置为false。重新启动服务器,一切就绪。