以下是上下文:
我为一家非常大的企业工作。在这里,我们有许多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无法发送我们的自定义错误页面,至少基本错误页面也不会包含任何敏感数据。
我们怎么做?
谢谢,
答案 0 :(得分:1)
您是否可以访问WAS的配置设置?如果是这样,您应该能够在httpd.conf中的ErrorDocument指令中设置一个新的默认基本错误页面。
答案 1 :(得分:1)
正如closingBrace所说,你应该通过配置你的Websphere应用服务器来阻止打印堆栈跟踪。
试试这个:
com.ibm.ws.webcontainer.suppressHtmlRecursiveErrorOutput 是Web容器自定义属性,用于禁止错误文本的HTML输出,而不更改邮件的内部日志记录。
您可以将此自定义属性设置为true,以向用户禁用错误消息的HTML输出,并向用户显示包含500错误代码的空白页。
自定义参数应放在:应用程序服务器&gt; server_name&gt; Web容器&gt;自定义属性&gt;