我们有一个JSF2.1.7应用程序,我们的IT安全发现了一个问题,如下所示
In Browser:
1) Get login Page.
2) Post Login Page with UserName/Password & submit&JSFViewStateId_1&JSessionID_1
3)Successful login.
几分钟内,如果我们使用旧的ViewState和新的JSession进行与下面相同的http请求。
1) Post Login page with UserName/Password & submit&JSFViewStateId_1&JSessionID_2
2) Successful Login
想知道服务器如何接受旧视图状态,当第二个请求发出时,它是否应报告视图已过期? 服务器是否将ViewSTate和JSession ID验证为组合身份验证。
答案 0 :(得分:0)
仅当javax.faces.STATE_SAVING_METHOD
设置为client
时才可以。然后javax.faces.ViewState
不表示引用存储在用户会话中的视图状态的唯一视图状态标识符,而是代表整个视图状态本身,以序列化的风格。然后会话ID不再相关。
正在测试的webapp显然已启用客户端状态保存。这是一个安全问题是否是第二个。只有在存在XSS漏洞时,才有可能将视图状态提取并发送到恶意服务器。 JSF本身具有非常强大的内置XSS防护功能,开发人员只能通过在重新显示用户控制的数据时显式使用escape="false"
来禁用它。即使如果有一个XSS漏洞,那么也可以发送会话ID。服务器端状态保存不会更安全。