会话ID在调用后被重新使用以使之无效

我继承了一个非常古老的JSP应用程序(JDK 1.3.1_15),并试图插入会话固定漏洞。

我在使用身份验证后成功使当前会话无效,HttpSession.invalidate()但是当创建新会话时,将重新使用旧会话ID。

<%

// login.jsp

if (authenticated) {

request.getSession().invalidate();

// create new session and store data

HttpSession session = request.getSession();

session.putValue(...);

// etc

response.sendRedirect("logged-in.jsp");

return;

}

%>

我可以在HTTP监视器中看到新的会话分配,只是再次使用了相同的数字。

-- Initial request response --

HTTP/1.1 200 OK

Set-Cookie: JSESSIONID=6a303082951311647336934;path=/

-- login.jsp request response --

HTTP/1.1 302 Moved Temporarily

Location: http://example.com/logged-in.jsp

Set-Cookie: JSESSIONID=6a303082951311647336934;path=/

在我之前,根本没有session.invalidate()第二个Set-Cookie响应头。

有人对如何生成新的会话ID有任何建议吗?我对JRUN4不太熟悉,但是在配置文档中拖拉并没有发现任何东西。

回答:

要解决此问题,您可以使用第二个非持久性Cookie来充当可以控制其值的会话ID。这个想法是生成一个唯一的id并将其存储在cookie和会话中。通过使用invalidate,对此cookie实施与尝试对会话执行的逻辑相同的逻辑。具体来说,在身份验证成功之前,不要发布将来的请求将接受的实际标识符。然后创建一个Servlet筛选器,该Servlet筛选器将检查每个请求并将该新cookie的值与会话中存储的值进行匹配。如果它们不匹配,则表明存在恶意行为。我知道这比仅依靠session.invalidate()发布新的ID

还要麻烦。但是考虑到您的约束和JRun的行为,这将为会话固定提供足够的保护。

以上是 会话ID在调用后被重新使用以使之无效 的全部内容, 来源链接: utcz.com/qa/398993.html

回到顶部