固定会话攻击(session fixation attack)是通过给被攻击人一个带session信息的URL地址,然后诱导其登录。如果登录后session信息不变,攻击者提供session就变成了登录状态。Servlet容器允许URL地址后面增加;JSESSIONID=...
的方式携带session信息。
所以必须在登录的时候,将原来的session作废,生成新的session。这里要注意的是,使用logout不能使session作废,而要用session的stop方法。代码如下:
Subject subject = getSubject(request, response);
// 此处不能使用 subject.logout(); 此方法无法让session作废,登录后还会继续使用原来的session。
subject.getSession().stop();
subject.getSession(true);
subject.login(token);