这是上下文:
我在一家非常大的企业工作。我们有许多WebSphere应用服务器集群,每个集群都运行着许多Java EE Web应用程序。其中大部分(但并非全部)应用程序在其web.xml文件中包含特殊指令,以在发生意外异常时显示自定义错误页面。以下是一个示例:
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
当然,我们的目标是向客户显示友好的错误页面,但更重要的是,我们主要的目标是隐藏通常包含在标准http 500错误页面中的堆栈跟踪。
正如你所知道的那样,这些堆栈跟踪包括许多敏感数据,例如软件包名称、类名称甚至方法名称。最糟糕的是,有时这些堆栈跟踪包含SQL异常,这通常会揭示使用哪个数据库服务器软件。更糟糕的是,有时这些堆栈跟踪包含文件和文件夹路径,这反过来又可以揭示我们的WebSphere应用程序服务器运行在哪个操作系统家族上。
我需要提到所有其他更加敏感的数据吗?(用户名、端口号、IP地址、计算机/服务器名称、JNDI对象名称...)
因此,并不意外,每个大型企业都需要向其客户隐藏这些堆栈跟踪。
但是,这是我们的问题:
有时,即使在web.xml文件中配置了自定义错误页面,WebSphere也会向客户的Web浏览器发送基本的错误页面。我非常清楚为什么WebSphere会这样做。例如,我知道当HTTP响应头已经提交时,WebSphere无法重置其缓冲区以发送自定义错误页面,因此无法做得比发送基本错误页面更好。
我的问题是:
(1)是否可以配置WebSphere,使其永远不会在其基本错误页面中包含任何堆栈跟踪?这样,即使出于某些技术原因,WebSphere无法发送我们的自定义错误页面,至少基本错误页面也不会包含任何敏感数据。
我们该如何做到这一点?
谢谢,