首页/安全/漏洞与攻击面速查/会话固定攻击与防护
Web 漏洞原理与防护55 条

会话固定攻击与防护

会话固定指攻击者预置一个会话标识并诱导受害者在其上登录,登录后攻击者沿用同一标识获得已认证会话;防护核心是登录成功时轮换会话 ID。

漏洞与攻击面速查安全更新于 2026-10-13

会话固定是什么

会话固定指攻击者先取得或预置一个会话标识,再诱导受害者在该标识上登录;登录成功后服务端沿用同一标识,攻击者便获得了已认证会话。它的核心不是猜口令,而是『登录后会话 ID 没变』。防护要点很直接:登录成功时轮换会话标识,并在权限变更时一并轮换。

基本信息

攻击前提攻击者能预置或获取未认证的会话标识
核心缺陷登录成功后未轮换会话 ID
防护主招登录成功时重新生成会话标识
相关场景单点登录回调、权限提升、切换账号
传输要求会话标识仅经 Cookie 传输,不放 URL

典型使用场景

  • 登录流程:认证成功后立即重新生成会话标识
  • 单点登录回调:回调完成时创建新会话,而不是复用请求带来的会话
  • 权限提升:管理后台提权或切换角色时同步轮换
  • 注销处理:注销即失效服务端会话,不只清 Cookie
  • 多端登录:新设备登录后按策略使旧会话失效

防护要点

防护要点
登录成功后轮换:session_regenerate_id(true)     # PHP 示例
Java:登录成功后调用 request.changeSessionId()
未登录阶段不分配持久化会话,避免被预置
会话 ID 只经 Cookie 传输,不放在 URL 参数中
设置空闲超时与绝对超时,注销立即失效服务端会话
# 验证方法:登录前后抓取 Cookie,确认会话标识确实发生变化

检查点与判据

检查点通过的判据常见问题
登录流程登录前后会话 ID 不同登录后沿用原 ID
权限变更提权时再次轮换提权后会话不变
Cookie 属性HttpOnly、Secure、SameSite缺失导致脚本可读
注销服务端会话立即失效只删客户端 Cookie
URL 携参会话标识不出现在 URL为兼容旧系统而透传
单点登录场景同样要检查:认证回调完成后应创建新会话,而不是复用请求携带的会话,这一点在自研或老旧集成中经常被遗漏。
会话固定常与开放重定向配合:跳转参数把受害者带到攻击者预置的会话上,因此两处配置要一起评估,单修一处效果有限。

易错点

  • 登录前就下发长期会话且登录后不轮换 ID:这是会话固定的典型形态
  • 只在登录处轮换,权限提升与切换账号不轮换:提权后的会话仍可被复用
  • 注销只清客户端 Cookie:服务端会话仍有效,被抓到的标识可继续使用
  • 为兼容旧接口把会话标识放进 URL:会被日志、浏览器历史与代理记录留存

数据来源与参考

  • OWASP Session Management Cheat Sheet
  • PHP 手册(session_regenerate_id)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌