【发布时间】:2015-08-03 01:59:22
【问题描述】:
我正在使用 *myfaces-api-2.2.3 并将 javax.faces.STATE_SAVING_METHOD 设置为 client ,
我得到了以下场景,
1) 用户 X 登录系统并添加用户 XXX(使用 jsf f:ajax 操作),在检查 chrome 开发工具时,您可以看到正在提交的表单以及 ViewState 值。
2) 复制该 ViewState 值(来自 chrome 开发工具 --> 网络选项卡)--> 将其放入带有表单的 html 文件中(模仿我原来的 添加用户 X)
3) 从用户 X 会话中注销(会话在该过程中失效)
4) 使用用户 Y 登录 --> 在浏览器中打开 that html 文件并点击表单的提交按钮 --> 你会注意到用户 XXX 是添加(尽管表单中使用的 ViewState 值属于其他用户(用户 X)。
我认为ViewState值不能那样使用,我认为它应该阻止这种行为,为什么可以使用一个ViewState em> 值在拥有自己的 ViewState 值的全新会话中,我如何确保用户无法重用 ViewState?
查看我的其他问题和BalusC 答案:Prevent CSRF in JSF2 with client side state saving
【问题讨论】:
-
仅供参考:这是客户端状态保存的指定/预期行为。只是不确定如何为 MyFaces 回答“我如何确保用户不能重用 ViewState”,而不是切换回服务器端状态保存。此外,CSRF 的可能性有点夸张,因为视图状态基本上包含组件状态,而不是登录用户和其他会话数据。这一切都取决于形式,例如如果它是一些用于用户管理的管理表单,攻击者可以准备一些状态(例如,为自己分配管理员角色)并让管理员用户提交它,但您仍然需要 XSS 漏洞和/或会话劫持。
-
视图状态 ID 不应该随着会话 @BalusC 而消失吗?
-
仅用于服务器端状态保存。另见 a.o. stackoverflow.com/a/3642969
-
@BalusC,我知道它,对于当前的实现,只有在服务器端状态保存的情况下“死”,但是如果视图状态 id(只是 id)也放在会话范围内的“有效视图状态”中id'列表,这个问题就解决了。我不认为这是一个“错误”或真正的“安全问题”,而是一个可以“改进”的“遗漏”。
标签: jsf-2 viewstate jsf-2.2 myfaces