2010-12-13 122 views

回答

6

JSF/Facelets在默认情况下已经转义输出UIOutputUIInput组件。所以只要你重新显示用户控制输入<h:outputText><h:inputWhatever>,那么XSS部分是安全的。

JSF也具有内置的防止CSRFjavax.faces.ViewState隐藏的输入字段。在JSF 2.1之前,这只是“太容易”猜测,另请参阅JSF impl issue 812JSF spec issue 869。最近(2010年10月3日)JSF 2.1已经修复。

请注意,针对SQL injection攻击的预防不是Web MVC框架的责任。您需要在数据层中解决该部分。如果您以正确的方式使用JPA(即,不要连接SQL字符串中的用户控制输入,但使用参数化查询),那么该部分也是安全的。

+0

@BalusC + 1感谢您的意见,我们只介绍了UIOutput和UIInput,它看起来很有前途。 – bakoyaro 2010-12-14 14:42:29

+0

@BalusC过滤器如何?由于'javax.faces.webapp.FacesServlet实现了javax.servlet.Servlet',我应该可以为任何通过我编写的Facelet创建的输入和输出过滤器编写输入和输出过滤器。 – bakoyaro 2010-12-14 21:12:38

+0

JSF确实运行在Servlet API之上。你确实可以在JSF webapp上使用servlet过滤器,但是我没有看到它们对于像XSS/CSRF/SQLI这样的安全问题有用。他们能做的最好的事情是根据登录用户进行认证/授权检查。在过滤器中消毒输入/输出的方式是一个糟糕的主意 - 如果您想要的话。输出转义(防止XSS)只能在视图方面完成。输入转义(以防止SQLI)应该只在数据层完成。 – BalusC 2010-12-14 21:14:12

相关问题