【发布时间】:2012-06-30 08:43:13
【问题描述】:
这是上下文:
我为一家非常大的企业工作。在这里,我们有许多 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 无法发送我们的自定义错误页面,至少基本错误页面不会包含任何敏感数据。
我们怎样才能做到这一点?
谢谢,
【问题讨论】:
-
无法回答您关于禁用堆栈跟踪的具体问题,但是您是否在 WebSphere 前面有一个 Web 服务器或代理,您可以在那里设置错误页面?
-
当您得到默认错误页面时,您正在使用 WAS 前面的 Web 服务器并通过 http 插件?
-
我们在 WebSphere 服务器前使用 Microsoft Internet Information Server,并使用 WebSphere 插件(ISAPI 过滤器)将 HTTP 请求转发到我们的 WebSphere 服务器。此外,我们使用 WebSphere 管理控制台来生成我们的“plugin-cfg.xml”文件。我们不能编辑这些文件(因为如果我们编辑它们来调整它们,我们会不断地重新编辑它们以保持我们的调整)。因此,如果需要对这些文件进行一些修改,WebSphere 管理控制台应在生成“plugin-cfg.xml”文件时包含这些修改。
-
所以我们必须使用 WebSphere 管理控制台来配置它,除非我们找到一种方法来配置 Internet Information Server 以检索自定义错误页面(即使错误来自 WebSphere,而不是来自 IIS)。
标签: java websphere stack-trace production-environment custom-error-pages