在开发一个基于jsp/servlet的易受攻击的应用程序的过程中,我尝试引入会话固定漏洞。
参考文档,我提出了以下代码,当在servlet中使用它创建一个新会话时,如果它存在,应该返回现有的HTTP,否则它应该返回null。无论如何,不应该创建新的会话。
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部署了它,并测试了会话固定:
c1) (使用拦截代理)c2)。我发现cookies c1和c2是不同的。这意味着代码不容易受到会话固定的影响。我很难理解这种行为。为什么原始cookie c1在身份验证之后不持久?
发布于 2014-11-11 14:21:14
在调用request.getSession()时,您使用的servlet引擎安全地处理会话cookie,并且不易被固定。
(如注释中所讨论的)这种行为既是有意的,也是正确的。无论是调用getSession()、getSession(真)还是getSession(false),服务器都依赖于自己的内存来确定是否存在与从客户端接收的值相匹配的有效会话。如果服务器内存中没有这样的会话,那么servlet引擎将忽略来自客户端的会话id。这防止了会话固定,因为服务器从来不允许客户端定义新会话的会话in (从内存中没有会话in的服务器的角度来看是新的)。
您需要找到易受会话固定影响的旧的、损坏的servlet引擎,或者需要替换会话管理代码。如果采用后一种方法,则需要确定是否可以在适当位置替换会话生成,或者是否编写自己的会话管理代码。
你所采取的方法应该反映你想要教的东西。如果你想让人教书..。
https://security.stackexchange.com/questions/72724
复制相似问题