9

这是上下文:

我为一家非常大的企业工作。在这里,我们有许多 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 无法发送我们的自定义错误页面,至少基本错误页面不会包含任何敏感数据。

我们应该怎么做?

谢谢,

4

2 回答 2

1

您有权访问 WAS 的配置设置吗?如果是这样,您应该能够在 httpd.conf 的 ErrorDocument 指令中设置一个新的默认基本错误页面。

于 2012-07-04T16:03:46.523 回答
1

正如 closeBrace 所说,您应该通过配置 Websphere 应用程序服务器来防止打印堆栈跟踪。

试试这个:
com.ibm.ws.webcontainer.suppressHtmlRecursiveErrorOutput是 Web 容器定制属性,用于抑制错误文本的 HTML 输出,而不更改消息的内部日志记录。

您可以将此定制属性设置为 true 以禁用向用户输出错误消息的 HTML 并向用户显示带有 500 错误代码的空白页面。

自定义参数应该放在:应用服务器>server_name>Web Container>自定义属性>

于 2016-12-15T13:31:07.917 回答