首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java会话固定

Java会话固定
EN

Security用户
提问于 2014-11-11 11:58:24
回答 1查看 3.9K关注 0票数 9

在开发一个基于jsp/servlet的易受攻击的应用程序的过程中,我尝试引入会话固定漏洞。

参考文档,我提出了以下代码,当在servlet中使用它创建一个新会话时,如果它存在,应该返回现有的HTTP,否则它应该返回null。无论如何,不应该创建新的会话。

代码语言:javascript
复制
if(obj.checkLogin(username, password))//if credentials are valid
    {
    HttpSession session = request.getSession(false);//return the existing session

    if(session != null)
            response.sendRedirect("LoginSuccess.jsp");
        else
            response.sendRedirect("error.jsp");
    }

为了测试代码,我使用tomcat 7部署了它,并测试了会话固定:

  1. 在加载登录页时观察cookie (c1) (使用拦截代理)
  2. 在登录表单中输入正确的凭据。身份验证成功,我被重定向到LoginSuccess.jsp
  3. 在身份验证之后观察cookie (c2)。

我发现cookies c1c2是不同的。这意味着代码不容易受到会话固定的影响。我很难理解这种行为。为什么原始cookie c1在身份验证之后不持久?

EN

回答 1

Security用户

发布于 2014-11-11 14:21:14

在调用request.getSession()时,您使用的servlet引擎安全地处理会话cookie,并且不易被固定。

(如注释中所讨论的)这种行为既是有意的,也是正确的。无论是调用getSession()、getSession(真)还是getSession(false),服务器都依赖于自己的内存来确定是否存在与从客户端接收的值相匹配的有效会话。如果服务器内存中没有这样的会话,那么servlet引擎将忽略来自客户端的会话id。这防止了会话固定,因为服务器从来不允许客户端定义新会话的会话in (从内存中没有会话in的服务器的角度来看是新的)。

您需要找到易受会话固定影响的旧的、损坏的servlet引擎,或者需要替换会话管理代码。如果采用后一种方法,则需要确定是否可以在适当位置替换会话生成,或者是否编写自己的会话管理代码。

你所采取的方法应该反映你想要教的东西。如果你想让人教书..。

  • 把你的东西修补好,然后再用坏了的旧引擎。
  • 不写自己的会话管理机制,写自己的
  • 不修改现有会话管理机制,然后修改现有会话管理机制。
票数 -1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/72724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档