加载中...

| 首次描述 | 2002 年,Mitja Kolsek,ACROS Security |
| 核心防御 | 登录成功后立即调用 session_regenerate_id() |
| 风险前提 | 服务器接受客户端预设的 Session ID |
攻击分三步:第一步,攻击者访问目标站点,获得一个合法的未认证 Session ID(例如 PHPSESSID=abc123)。第二步,攻击者诱导受害者通过携带该 Session ID 的链接访问站点——可能通过 URL 参数(?PHPSESSID=abc123)或 Meta Refresh 注入完成。第三步,受害者正常登录后,若服务器没有在认证成功时重新生成 Session ID,攻击者原先持有的 Session ID 就自动升级为已认证状态,整个会话被劫持。
这种攻击不需要监听网络流量,也不依赖 XSS,纯粹利用服务端的设计缺陷。2002 年,Mitja Kolsek 在 ACROS 安全研究报告中首次系统性描述该攻击模式。[1]
核心防御只有一条:用户身份升级时必须重新生成 Session ID。即在登录成功(权限提升)后,立即调用 session_regenerate_id(true)(PHP)或等效接口,销毁旧 Session,签发新 ID。
辅助措施包括:拒绝通过 URL 参数传递 Session ID,只接受 Cookie 中的值;为 Cookie 设置 HttpOnly 和 Secure 属性;在服务端对 Session 绑定客户端 IP 或 User-Agent(虽然这会影响移动端体验,且可被伪造,是弱防御)。Spring Security、Django、Rails 等主流框架的默认配置都会在登录后自动轮转 Session ID,但开发者自定义会话管理时容易遗漏这一步。

| 首次描述 | 2002 年,Mitja Kolsek,ACROS Security |
| 核心防御 | 登录成功后立即调用 session_regenerate_id() |
| 风险前提 | 服务器接受客户端预设的 Session ID |
登录 后参与讨论
暂无讨论,来发表第一条评论吧