避免Tomcat调试信息泄露的最佳实践

简介: 小米分享了团队解决网站敏感信息泄露问题的经历。在处理运行时错误时,Tomcat显示的调试信息可能泄露。尝试过使用Spring Boot的`ErrorAttributes`接口和修改Tomcat默认错误页面均未成功。最终,他们通过自定义错误页面并配置`application.yml`来隐藏敏感信息,成功解决了问题。这个方法推荐给其他开发者作为避免调试信息泄露的安全实践。

大家好!我是小米,一个热爱分享技术的小伙伴。最近我们团队在进行网站安全扫描时,发现了一个敏感信息泄露的漏洞。经过一番努力,终于解决了这个问题。今天我想在这里分享我们的经历,希望能为大家提供一些参考和帮助。

问题背景

在处理请求过程中,如果服务器遇到运行时错误,Tomcat会向请求者展示调试信息。这些信息对于开发人员来说非常有用,但如果暴露给外部用户,则可能导致敏感信息泄露。根据安全管理要求,我们需要确保这些调试信息不被泄露给请求者。

方案一:使用ErrorAttributes自定义错误信息

首先,我们尝试通过Spring Boot提供的 ErrorAttributes 接口来自定义错误信息。具体实现如下:

这种方式在理论上是可行的,但在我们的项目中却没有效果。经过排查发现,由于项目架构复杂,部分错误并没有通过Spring Boot的错误处理机制,因此这个方案行不通。

方案二:修改 Tomcat 的默认错误页面

接下来,我们考虑直接修改Tomcat的默认错误页面。Tomcat的默认错误页面是通过 webapps/ROOT 目录下的 error.jsp 文件来定义的。

尽管这个方法可以解决问题,但它需要修改Tomcat的源码,维护起来比较麻烦。而且这种方式不够优雅,不符合我们的最佳实践,因此我们放弃了这个方案。

方案三:通过配置禁用错误信息

我们还尝试通过Spring Boot的配置文件来禁用错误信息,具体配置如下:

然而,这种方式在我们的项目中同样没有效果。进一步调研发现,这个配置项只对Spring Boot自带的Whitelabel Error Page有效,对其他类型的错误无效。

方案四:自定义错误页面

最后,我们决定通过自定义错误页面来解决这个问题。具体实现如下:

1. 在项目的resources/templates目录下创建自定义的错误页面error.html:

2. 在application.yml中配置自定义的错误页面路径:

3. 创建一个错误处理控制器:

通过这种方式,我们成功实现了自定义错误页面,解决了敏感信息泄露的问题。

总结

在处理网站安全问题时,敏感信息泄露是一个需要特别注意的方面。我们的经验表明,通过自定义错误页面,可以有效地避免将调试信息暴露给请求者。在解决这个问题的过程中,我们尝试了多种方案,最终选择了自定义错误页面的方式。

希望我们的经验能对大家有所帮助!如果你们在实际工作中也遇到类似的问题,可以参考我们的解决方案。当然,每个项目的情况都不尽相同,大家也可以根据自己的需求进行调整和优化。

END

感谢大家的阅读,欢迎在评论区分享你们的经验和心得!

祝大家工作顺利,生活愉快!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
4月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
7月前
|
Dubbo Java 应用服务中间件
启动tomcat时,卡主在信息: Initializing Spring FrameworkServlet 'e3-manager'
启动tomcat时,卡主在信息: Initializing Spring FrameworkServlet 'e3-manager'
49 0
|
监控 Cloud Native 应用服务中间件
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(1)
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(1)
121 0
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(1)
|
Prometheus Cloud Native 应用服务中间件
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(2)
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(2)
120 0
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(2)
|
Cloud Native Java 应用服务中间件
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(3)
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(3)
112 0
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(3)
|
Cloud Native 应用服务中间件 Apache
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(4)
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(4)
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(4)
|
数据采集 Cloud Native 应用服务中间件
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(5)
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(5)
带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(5)
|
Java 应用服务中间件 Apache
一招教你如何减少本地调试tomcat重启次数,亲测有效
一招教你如何减少本地调试tomcat重启次数,亲测有效
|
Java 应用服务中间件 Apache
拆解Tomcat10: (二) 在Idea中调试最新的Tomcat10源码(二)
拆解Tomcat10: (二) 在Idea中调试最新的Tomcat10源码
426 0
拆解Tomcat10: (二) 在Idea中调试最新的Tomcat10源码(二)
|
应用服务中间件 Windows
拆解Tomcat10: (二) 在Idea中调试最新的Tomcat10源码(三)
拆解Tomcat10: (二) 在Idea中调试最新的Tomcat10源码
177 0
拆解Tomcat10: (二) 在Idea中调试最新的Tomcat10源码(三)