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