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

会话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的行为,这将为会话固定提供足够的保护。



 类似资料:
  • 问题内容: 我继承了一个非常古老的JSP应用程序(JDK 1.3.1_15),并试图插入会话固定漏洞。 在使用身份验证后,我成功使当前会话无效,但是在创建新会话时,将重新使用旧会话ID。 我可以在HTTP监视器中看到新的会话分配,只是再次使用了相同的数字。 在我之前,根本没有第二个响应头。 有人对如何生成新的会话ID有任何建议吗?我对JRUN4不太熟悉,但是在配置文档中拖拉并没有发现任何东西。 问

  • 问题内容: 我正在尝试使用Cucumber / Java编写一些硒自动UI测试。如果我的功能文件中只有一个测试,则一切正常。但是,如果我添加第二个测试,则会在上出现此错误: 基本上,我将在一个包中的InitializeWebdriver类上初始化webdriver变量,然后在其他(步骤定义)类中对其进行引用。我确实将下面的步骤定义作为InitializeWebdriver类的一部分列出,并且工作正

  • get WindowHandle时,我遇到了一个webDriver异常。 org.openqa.selenium.webdriverexception:未知会话ID:364337EB-405E-49FA-AA75-D048F10CB52C命令持续时间或超时:548毫秒构建信息:版本:“3.0.1”,修订版:“1969D75”,时间:“2016-10-18 09:49:13-0700”系统信息:主机

  • 问题内容: 为了进行记录,我想创建一个记录器,该记录器将当前会话的ID自动添加到记录的行中。 对于已登录的用户,这不是问题: 问题是,在用户登录之前的回报。是否有另一种获取会话ID的方法,而无需引用当前响应或此类响应? 问题答案: 您可以使用 这依赖于Spring的,因此应与Spring MVC一起使用,否则您应该有一个声明。如果不存在,还将创建会话。

  • 问题内容: 在引发约束违规异常之后,有什么方法可以继续使用线程绑定的hibernate会话吗?我在这里举一个简短的例子: 从现在开始,hibernate会话完全没有用,即使对于只读操作,例如使用OpenSessionInView模式在视图中呈现惰性集合。 问题答案: Session的文档指出, 如果Session引发异常,则必须回滚事务并丢弃会话。 发生异常后,会话的内部状态可能与数据库不一致。。

  • 我正在Codeigniter中创建API。在这个API中,我为用户提供了一个登录函数。如果登录成功,我将在CI会话中设置用户数据,并将会话返回给用户。 现在,用户可以使用该会话ID来验证他自己的所有其他请求,如添加/更新/删除。基本上,我希望当用户发送下一个请求时,我可以根据他的会话ID验证他的凭据。 客户请求代码: 上面是一个从客户端到服务器的登录请求示例。在服务器端,服务器验证客户端提供的凭据

  • 在我的Vaadin应用程序中,当Vaadin在“session Timeout”消息之后没有使会话无效时,我遇到了一个问题。收到此消息后,用户有时可以单击链接或刷新页面,并继续工作,就像他们仍在登录一样。我使用以下参数: Last参数(session-timeout)也在context.xml(session-timeout=900)和web.xml(session-config/session-

  • 中描述的声明性基和ORM映射函数 映射器配置 是ORM的主要配置接口。配置映射后,持久性操作的主要使用接口是 Session . 会话基础 会议的作用是什么? 使用会话的基础知识 打开和关闭会话 构建begin/commit/rollback块 使用sessionmaker 查询(1.x样式) 查询(2.0样式) 添加新项目或现有项目 删除 冲洗 过期/刷新 使用任意WHERE子句更新和删除 自动