生产环境 - HTTP 500错误页面 - 请勿显示堆栈跟踪信息

9

这是上下文:

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

无法回答有关禁用堆栈跟踪的具体问题,但是您是否在WebSphere前面有一个Web服务器或代理,可以在那里设置错误页面? - dbreaux
当您使用WAS前面的Web服务器并通过http插件进行访问时,是否遇到了默认错误页面? - ams
我们在WebSphere服务器前使用Microsoft Internet Information Server,并使用WebSphere插件(一个ISAPI过滤器)将HTTP请求转发到我们的WebSphere服务器。此外,我们使用WebSphere管理控制台生成我们的“plugin-cfg.xml”文件。我们无法编辑这些文件(因为如果我们编辑它们来调整它们,我们将不断重新编辑它们以保持我们的调整)。因此,如果需要对这些文件进行一些修改,则WebSphere管理控制台应在生成“plugin-cfg.xml”文件时包含这些修改。 - closingBrace
所以我们必须使用WebSphere管理控制台来配置它,除非我们找到一种方法来配置Internet Information Server检索自定义错误页面(即使错误来自WebSphere而不是IIS)。 - closingBrace
2个回答

1
如closingBrace所说,您应该通过配置您的Websphere应用程序服务器来防止打印堆栈跟踪。
请尝试以下方法:
com.ibm.ws.webcontainer.suppressHtmlRecursiveErrorOutput是Web容器自定义属性,可抑制错误文本的HTML输出,而不更改消息的内部日志记录。
您可以将此自定义属性设置为true,以禁用向用户呈现错误消息的HTML输出,并向用户呈现带有500错误代码的空白页面。
自定义参数应放置在:应用程序服务器>server_name>Web容器>自定义属性>

1
你是否可以访问 WAS 的配置设置?如果可以的话,你应该能够在 httpd.conf 中的 ErrorDocument 指令中设置一个新的默认基本错误页面。

据我所知,“httpd.conf”是与Apache / IHS(IBM HTTP服务器)相关的...我们在WebSphere服务器前使用Microsoft Information Server作为Web服务器。您是否知道即使WebSphere位于Internet Information Server后面,此文件(httpd.conf)是否也会涉及其中? - closingBrace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接