2012-07-16 85 views
2

我是JSF的新手,所以我对某些标签的知识并不太好。 我想知道的是如何安全地传递参数在这种情况下:JSF f:事件可以安全地传递参数吗?

<f:event listener="#{backBean.myMethod(**param**)}" type="preRenderView"/> 

因为,我要通过这个“参数”,用户无法接取该信息(改变这个值意味着一个安全缺陷,并且这不会发生)。所以我问这个知道是否可以使用这个事件来破解这个代码(传递另一个参数)?

谢谢!

回答

5

如果param值不能由最终用户控制,那么你很安全。就那么简单。您直接或间接(通过JSF或DB)从HttpServletRequest提取的任何内容均在完整控制的最终用户。

因此,如果您例如硬编码,

<f:event listener="#{backBean.myMethod('foo')}" type="preRenderView"/> 

那么你是安全的。

但是,如果你传递一个用户控制的请求参数,

<f:event listener="#{backBean.myMethod(param.foo)}" type="preRenderView"/> 

那么你就只有安全的,如果你验证其在服务器端的价值。

+0

感谢您的帮助。所以在我的情况下,我将通过参数作为您发布的第一种情况。只是为了更多地理解,这整个标签,用户无法访问它,没有任何信息(考虑'foo'的情况)?这怎么可能?这个代码(f:event ...)只在服务器端访问? – sampert 2012-07-16 20:25:06

+0

它完全在服务器端执行。我认为,如果您意识到webbrowser根本没有检索到JSF源代码,那么它会有所帮助。它只检索其生成的HTML输出。右键单击webbrowser中的JSF页面,然后选择*查看源代码*以自己查看。如果您通过学习基本的HTTP,HTML和Servlet教程了解HTTP,HTML和Servlet的工作方式,这也会有所帮助。最终用户只能控制通过HTTP响应(例如,JavaScript)检索到的任何内容,并且已通过HTTP请求(标头,参数和主体)发送。 – BalusC 2012-07-16 20:28:19

+0

这真的很有帮助。非常感谢您的帮助。 – sampert 2012-07-16 20:39:55