每当你验证,应用程序应该改变它使用会话标识符。 这有助于防止建立会话,复制会话标识符,然后诱使用户使用会话的人。 因为攻击者已经知道会话标识符,就可以利用它在用户登录后才能访问会话,让他们完全访问权限。 这种攻击被称为除其他事项外“会话固定”。 我怎样才能改变,一旦用户登录到系统的会话ID?
Answer 1:
你还是在服务器上,而你无效会话。
//get stuff out of session you want before invalidating it.
currentSession = request.getSession(true);
UserProfile userProfile = (UserProfile) currentSession.getAttribute("userProfile");
//now invalidate it
currentSession.invalidate();
//get new session and stuff the data back in
HttpSession newSession = request.getSession(true);
newSession.setAttribute("userProfile", userProfile);
Answer 2:
获取现有的; 而无效; 创建一个新的...
1)获取与HttpServletRequest.getSession当前会话();
2)清除会话:HttpSession.invalidate();
3)创建一个新问题: HttpServletRequest.getSession(真) ;
Answer 3:
一般说到(因为这不是一个Java问题都没有,这是一个一般的网络问题)时,会话ID很容易发现或猜测会话固定出现。 攻击的主要方法是当会话ID是在页面的URL,例如http://example.com/index?sessionId=123 。 攻击者可以设置捕捉会话,然后嵌入链接在自己的页面,诱使用户访问,并成为他们的会话的一部分。 然后,当用户认证会话认证。 造成这种情况的缓解是不使用基于URL的会话ID,而是使用cookies
一些web应用程序将使用基于一个Cookie会话,但是从最初的URL设置,例如访问http://example.com/index?sessionId=123会看到在URL中的会话ID,然后从它创建一个会话cookie,在会话cookie ID设定为123这种情况的缓解是在服务器上生成随机会话ID,而无需使用任何用户输入作为种子到发电机。
还有基于浏览器的漏洞,其中一个编码不浏览器将接受cookie创建为不属于原始域的域,但没有太多可以做一下。 和跨站点脚本攻击,你可以发送一个脚本命令进入攻击网站设置会话cookie,它可以通过设置会话cookie是HTTP_ONLY(尽管Safari不遵循这个标志)来缓解
对于Java的一般建议
session.invalidate();
session=request.getSession(true);
然而,在JBoss上的一个点并没有工作 - 所以你需要检查这个工作你所选择的框架内,符合市场预期。
Answer 4:
无效当前会话和获得新的会话:
//invalidate the current session
request.getSession().invalidate();
/*
get another session and get the ID (getSession()) will create a session if one does not exist
*/
request.getSession().getId();