2014-04-15 23 views
2

我想,以防止在用户登录后更改JSESSIONID会话固定漏洞。如何在用户登录liftweb后更改JSESSIONID的值?

我使用的是SessionVar存储用户数据,并S.session.open_!.destroySessionAndContinueInNewSession无效旧的会话,并创建在登录时新的。

但是,它不起作用。 JSESSIONID的值完全不变。它仍然是一样的。

我也尝试登出使用:

S.session.open_!.destroySession() 
S.request.foreach(_.request.session.terminate) 

触发会话ID复位。但是,它也不起作用。

如何在liftweb上登录时更改JSESSIONID的值?

回答

2

随着电梯有两种类型的会议。有一个容器会话,并且在一个与JSESSIONID绑定的Servlet环境中,并且有LiftSession,这是Lift的抽象。提升将自己的会话绑定到容器会话,但它不直接负责容器如何生成和维护会话。

据我所知,上面的所有代码片段都会导致对javax.servlet.http.HttpSession.invalidate()的调用,但在此之后,它将由容器来处理生成新的ID客户。我的猜测是,当发送响应时,当客户端发出下一个请求时,容器使用所请求的ID启动一个新的会话,而您的容器不会取消设置JSESSIONID cookie。

我想你会想要做的是看看你的容器(Jetty,Tomcat等)如何处理与现有会话不相关的JSESSIONID值的请求,以及它是否在使用请求的值时一个会话不存在,如何禁用该功能。 This SO question可能会有所帮助。

+0

很酷。感谢您的提示。我在这里发布了这个发现:http://winston.attlin.com/2014/04/choose-your-container-to-fix-session.html –

相关问题