在开发一个易受攻击的基于 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 部署的代码并测试了会话固定:
- 登录页面加载时观察 cookie (
c1)(使用拦截代理) - 在登录表单中输入正确的凭据。身份验证成功,我被重定向到 LoginSuccess.jsp
- 验证后观察 cookie (
c2)。
我发现饼干c1和c2与众不同。这意味着代码不容易受到会话固定的影响。我无法理解这种行为。为什么认证后原来的cookiec1不存在了?