httpservletrequest创建新会话/更改会话Id

发布时间 2023-11-29 19:35:52作者: sunny123456

java httpservletrequest创建新会话/更改会话Id

我正在维护一个Java web应用程序

查看登录代码,它通过HttpServletRequest的getSession()方法从HttpServletRequest获取HttpSession。(它在会话中使用一些值进行身份验证)

但是我担心会话固定攻击,所以在使用初始会话后,我想启动新会话或更改会话id。这可能吗


共 (2) 个答案

  1. # 1 楼答案

    Servlet3.0API不允许您更改现有会话上的会话id。通常,为了防止会话固定,您只需要创建一个新会话,并使旧会话无效

    您可以使这样的会话无效

    request.getSession(false).invalidate();
    

    然后使用创建一个新会话

    getSession(true)getSession()也应该可以)

    显然,如果会话中有要持久化的数据,则需要将其从第一个会话复制到第二个会话

    注意,对于会话固定保护,通常认为只要在身份验证请求上执行此操作就可以了。但是,更高级别的安全性包括丢弃旧会话,并为每个请求创建新会话

  2. # 2 楼答案

    由于JavaEE7和ServletAPI3.1(Tomcat8),您可以使用HttpServletRequest.changeSessionId()来实现这种行为。还有一个监听器HttpSessionIdListener,它将在每次更改后调用

原文链接:https://www.cnpython.com/java/372606