当前位置: 首页 > 面试题库 >

呼叫无效后,会话ID已重新使用

司徒骞尧
2023-03-14
问题内容

继承了一个非常古老的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的行为,这将为会话固定提供足够的保护。



 类似资料:
  • 我正在开发一个VoIP应用程序,使用Twilio进行电话。我面临的问题是,如果AVAudioSession在呼叫进行中被中断,例如被传入的FaceTime呼叫中断,那么在中断结束后,我无法继续使用音频会话。电话没有断开,但听不到声音,麦克风也没有记录任何东西。 我已经注册了AVAudioSessionInterruptionNotification,并在通知处理程序中执行以下操作: 我没有得到任何

  • 因此,我尝试使用JSF托管bean上的方法访问HttpSession的属性 但是我得到了一个 为什么啊? 在我的一个会话bean被销毁之前,我需要访问该会话打开的外部服务的连接列表,它们当然存储在会话属性对象上。 我该怎么做?

  • Im使用插件IWD的伍兹商业,这是一个一致的错误,我收到。寻求帮助如何解决这个问题?我对代码非常陌生,并试图理解它。但这超出了我的知识水平。 [星期三Jul29 19:36:02.765466 2020][php7:通知][pid 31401][客户端101.161.102.84:53742]id被错误地调用。不应直接访问产品属性。回溯:要求('wp-blog-header.php'),requi

  • 我使用Selenium WebDriver和Chrome在我的应用程序中进行功能测试。我已经用rspec、capybara和selenium成功地设置了多个rails应用程序,但我不知道为什么这个不能工作。 问题是:当我第一次运行特性测试时,它会按照计划工作。但是,如果我再次运行它,selenium会崩溃,并出现以下消息: Selenium::WebDriver::Error::NoSuchDri

  • 我们正在使用Spring安全OAuth2保护REST服务。应用程序可以调用、或终结点。令牌和rest api终结点是无状态的,不需要会话。 我们可以在用户经过身份验证后使会话无效吗?如果是,最好的方法是什么。我们希望用户在调用时始终登录。当前,每当会话存在时,对的调用都会跳过身份验证。

  • 如何使会话中的特定bean无效? 我有这个示例代码。我使用外部上下文进行测试。失效会话();但它会销毁应用程序中会话中的所有bean,因为它会销毁整个会话。 但是,使用invalidateSession,会话中的所有bean都将被销毁,我只想使一个特定的“托管”bean失效,我如何做到这一点?