这里是上下文:
我为一个大型企业工作。在这里,我们有许多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响应的 header 已经提交时,WebSphere无法重置其缓冲区以发送自定义错误页面,因此不能做得比发送基本错误页面更好。
这是我的问题:
(1)是否可以配置WebSphere,使其从不在其基本错误页面中包含任何stacktrace?这样,即使出于某种技术原因,即使WebSphere无法发送我们的自定义错误页面,至少基本错误页面也不会包含任何敏感数据。
我们应该怎么做?
谢谢,
最佳答案
您可以访问WAS的配置设置吗?如果是这样,您应该能够在httpd.conf的ErrorDocument指令中设置新的默认基本错误页面。