【发布时间】:2013-12-18 22:14:40
【问题描述】:
我目前正在修改使用 JSF 创建的应用程序。有关我正在做的事情的一些背景信息,请阅读下文。
背景
Acunetix 扫描在处理 javax.faces.ViewState 的值时,在我的大多数页面中检测到一个称为“应用程序错误消息”的中等安全问题。 Acunetix 扫描将视图状态更改为随机值或空字符串,这会导致我的应用程序引发异常。使用 web.xml 文件中的以下配置的自定义错误页面会捕获异常。
<error-page>
<error-code>500</error-code>
<location>/unhandled.xhtml</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/unhandled.xhtml</location>
</error-page>
这按预期工作,并显示自定义错误页面。但是,Acunetix 扫描将此视为漏洞,因为它在标头中看到 500 状态代码以及错误消息 Internal Server Error。
Acunetix 扫描摘录
/webapp/login.xhtml
Details
URL encoded Post input javax.faces.ViewState was set to
Error message found: Internal Server Error
问题:
是否可以将错误页面的状态代码更改为 200 而不是 500。如果不能,任何人都可以建议一种解决方法,让我可以操纵页面状态代码。
注意:
请注意,我使用以下框架 Spring、JSF 2.0、Primefaces 3.4、Hibernate、Omnifaces(FacesEceptionFilter & FullAjaxExceptionHandlerFactory)、Tomcat 7 服务器。
感谢您的帮助...
【问题讨论】:
-
我不这么认为,但最明显的问题是你试过了吗?也就是web.xml中的200改成500了吗?如果有,是否达到了预期的效果?
-
@EJK 感谢您的评论,但我真正想要的(作为解决方法)是错误页面的响应标头为 200,因为它目前为 500。
-
@EJK 不管怎样,我将错误代码替换为 200 并删除了 java.lang.Throwable 异常类型,因此我可以尝试您的建议。我只是被重定向到默认的 404 而不是我的自定义错误页面,因为错误代码不匹配。
-
在下面查看我的答案。我认为 servlet 过滤器就是答案。
-
@EJK 谢谢我会试一试。