会话固定攻击定义
会话固定攻击(Session Fixation Attack)是一种利用服务端会话标识符(Session
ID)保持不变的特性,诱导受害者使用攻击者已知的会话ID进行登录,从而非法获取该会话控制权的攻击手法。

攻击流程示意图:

https://img/18-1-27-44844045.jpg

典型攻击步骤包括:

攻击者正常访问目标网站;

服务器为该攻击者生成一个会话ID并返回;

攻击者构造包含此会话ID的链接发送给受害者;

受害者点击该链接并使用自身账户登录网站,此时会话ID未改变;

登录成功后,会话建立;

攻击者使用同一会话ID即可冒充受害者身份,接管其会话。

更多案例可参考:https://www.owasp.org/index.php/Session_fixation

漏洞原理分析
攻击成功的关键在于会话ID在整个流程中始终未发生变化。

修复建议

  1. 登录后重置会话

在用户完成登录后,使原有会话失效并创建全新的会话ID,确保攻击者无法复用之前的ID。

java
// 使当前会话失效
session.invalidate();

// 创建新会话
session = request.getSession(true);

  1. 限制客户端Cookie访问

通过设置HttpOnly属性,防止JavaScript访问Cookie中的会话信息,这也能有效防御结合XSS攻击实施的会话固定攻击。可在HTTP响应头中配置,或在Tomcat等容器中全局设置。