无论何时进行身份验证,您的应用程序都应该更改它使用的会话标识符。这有助于防止有人建立会话、复制会话标识符,然后诱使用户使用该会话。因为攻击者已经知道会话标识符,所以他们可以在用户登录后使用它来访问会话,从而为他们提供完全访问权限。这种攻击被称为“会话固定”以及其他攻击。一旦用户登录到系统,如何更改会话id?
发布于 2009-07-25 00:32:37
当您使会话无效时,您仍然在服务器上。
//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);发布于 2009-07-22 06:22:05
获取现有的;使其无效;创建一个新的...
1)使用HttpServletRequest.getSession()获取当前会话;
2)清除会话: HttpSession.invalidate();
3)新建一个: HttpServletRequest.getSession(true)(http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html#getSession(boolean%29);
发布于 2009-07-22 06:28:34
一般而言(因为这根本不是Java问题,而是一般的web问题)当会话it很容易发现或猜测时,就会出现会话固定。主要的攻击方法是当会话ID在页面的URL中时,例如http://example.com/index?sessionId=123。攻击者可以设置捕获会话,然后将链接嵌入到他们的页面中,诱使用户访问该会话并成为其会话的一部分。然后,当用户进行身份验证时,会话也会通过身份验证。缓解此问题的方法是不使用基于URL的会话ID,而是使用cookie
一些网络应用程序将使用基于会话的cookie,但是从初始URL设置它,例如,访问http://example.com/index?sessionId=123会看到url中的会话id,然后从它创建一个会话cookie,将会话cookie中的id设置为123。缓解方法是在服务器上生成随机会话is,而不使用任何用户输入作为生成器的种子。
也有基于浏览器的攻击,编码不佳的浏览器将接受非原始域的cookie创建,但您对此无能为力。和跨站点脚本攻击,您可以向被攻击的站点发送脚本命令来设置会话cookie,这可以通过将会话cookie设置为HTTP_ONLY来缓解(尽管Safari不支持此标志)
对于Java,一般建议是
session.invalidate();
session=request.getSession(true); 然而,在JBoss上,这在某种程度上是不起作用的--所以你需要在你选择的框架中检查它是否能正常工作。
https://stackoverflow.com/questions/1163319
复制相似问题