什么是会话固定攻击(Session Fixation)?

你知道吗?登录网站时,网站是怎么记住你身份的?答案就是会话(Session)。

可以把 Session 想象成住酒店拿到的房卡。拿着这张卡,酒店就知道你是哪个房间的客人,能进出房间、使用配套设施。但如果这张房卡被人动了手脚呢?

打个比方:你参加旅行团,导游帮所有人办入住,发给你一张 302 号房的房卡。你刷卡进门,一切正常,可你不知道导游手里还有一张一模一样的房卡。你入住后,他随时能打开你的房门 —— 这就是会话固定攻击(Session Fixation)的核心逻辑。

简单说:黑客提前准备好一个会话 ID,想方设法让你用这个 ID 登录。你登录成功后,黑客用同一个 ID 就能冒充你的身份,接管你的账号。

先搞懂:什么是 Session?

网页本身是 “无状态” 的。简单讲,你每次给网站发请求,对网站来说都是 “陌生人”—— 它不会自动记住你刚登录过、购物车里加过商品。

要是没有 Session,每换一个页面就得重新登录,购物车内容也会清空,体验极差。所以网站需要 Session 机制,用来记住用户身份和操作状态。

Session 的正常运作流程

  1. 用户提交登录信息:输入账号密码,点击登录,浏览器把信息发给服务器。
  2. 服务器生成会话 ID:验证账号密码正确后,服务器生成唯一的
  3. 会话 ID(Session ID),把这个 ID 和你的身份信息绑定,存在服务器里。
  4. 服务器把 ID 发给浏览器:服务器返回网页时,会在 HTTP 响应头里加Set-Cookie字段,把 Session ID 写进去,比如Set-Cookie: session_id=abc123xyz789。浏览器收到后,会自动把这个 ID 存到 Cookie 里,全程不用用户操作。
  5. 后续请求自动带 ID:之后浏览网站其他页面时,浏览器会自动把 Cookie 里的 Session ID 放进请求里发给服务器。服务器核对 ID,就能认出 “这是某某用户”,实现记住登录状态的效果。

会话固定攻击:黑客是怎么动手的?

这种攻击涉及三方:攻击者(黑客)、受害者(普通用户)、存在漏洞的网站。核心漏洞是:网站在用户登录后,没有更换新的 Session ID,继续沿用登录前的旧 ID。

完整攻击步骤

第一步:黑客获取一个空白 Session ID

黑客先正常访问目标网站。很多网站为了支持 “未登录也能浏览商品、加购物车”,会在用户刚进入网站时,就分配一个空白 Session ID—— 这个 ID 此时没绑定任何身份,只是临时标识。

黑客拿到这个 ID(比如abc123),记下来备用。

第二步:黑客把这个 ID “塞给” 受害者

黑客制作一个带 Session ID 的恶意链接,链接看起来和正常网站地址没区别,只是末尾加了 Session ID 参数,比如:https://example.com/login?sid=abc123。

接着黑客通过钓鱼邮件、短信、社交软件把链接发给受害者,附上当理由话术,比如 “你的账号有异常,点击链接核实身份”“免费领取福利,点击登录领取”。

第三步:受害者中招,使用黑客指定的 ID

受害者没警惕心,点击恶意链接。浏览器向网站发请求,请求地址里带着黑客写的sid=abc123。

有漏洞的网站会接受 URL 里的 Session ID,直接把abc123设为受害者的 Session ID,还会通过Set-Cookie把这个 ID 存到受害者浏览器的 Cookie 里。

之后受害者在登录页输入自己的账号密码,成功登录。

第四步:关键漏洞 —— 网站不更换 Session ID

正常网站在用户登录(权限从游客变成会员)后,会立刻作废旧 ID、生成新 ID。但漏洞网站会继续用原来的abc123,并把受害者的身份和这个 ID 绑定。

此时,abc123从空白 ID 变成了 “绑定受害者账号” 的有效 ID,而这个 ID,黑客早就知道。

第五步:黑客用同一个 ID 冒充受害者

黑客把abc123存到自己浏览器的 Cookie 里,访问目标网站。服务器收到请求后,核对 Session ID,发现abc123对应受害者的登录状态,就会把黑客当成受害者。

黑客不需要知道受害者的账号密码,就能直接进入受害者账号,查看个人信息、交易记录,甚至进行转账、下单、改密码等操作。

会话固定攻击有哪些危害?

一旦攻击成功,黑客能完全控制受害者账号,造成多种严重后果:

  1. 窃取隐私信息:查看个人资料、聊天记录、订单信息、绑定的手机号和邮箱等敏感内容。
  2. 发起未授权操作:以受害者名义在电商平台下单、支付,在社交账号发不良言论,在银行类网站转账。
  3. 永久接管账号:修改受害者的账号密码、绑定手机和邮箱,让受害者无法登录自己的账号,彻底失去账号控制权。

如何防范会话固定攻击?

攻击的核心是 “登录前后共用同一个 Session ID”,防护思路很明确:破坏这个共用逻辑,核心有 3 点:

1. 登录成功后,必须重新生成 Session ID(最关键)

用户登录、权限提升时,服务器要做两件事:作废旧 Session ID、生成全新的随机 Session ID,再把新 ID 发给浏览器。

这一步叫 “会话再生(Session Regeneration)”,主流开发框架(如 Java Spring、Python Django、PHP Laravel)都内置了这个功能,开发者只需在登录成功后调用对应函数即可。只要做到这一点,黑客手里的旧 ID 会直接失效,攻击无法成功。

2. 拒绝从 URL、表单获取 Session ID

很多网站早期为兼容不支持 Cookie 的浏览器,会允许从 URL 参数、表单隐藏字段读取 Session ID,这是高危漏洞。

正确做法:只接受 Cookie 里的 Session ID,拒绝 URL、表单传来的 ID,从根源上杜绝黑客通过恶意链接植入 ID 的可能。

3. 给 Cookie 设置安全属性

Session ID 存在 Cookie 里,给 Cookie 加安全属性,能进一步降低风险:

  • HttpOnly:禁止 JavaScript 读取 Cookie,防止跨站脚本攻击(XSS)窃取 Session ID。
  • Secure:Cookie 仅在 HTTPS 加密连接中传输,避免中间人攻击拦截 ID。
  • SameSite:限制 Cookie 跨站传输,防范跨站请求伪造攻击(CSRF)。

总之,会话固定攻击,本质是黑客提前固定一个 Session ID,诱导受害者使用该 ID 登录,再用同一 ID 冒充受害者。它和会话劫持(Session Hijacking)不同:劫持是 “偷” 用户已有的 Session ID,固定攻击是 “给” 用户一个黑客已知的 ID。

对开发者来说,防护核心只有一句话:用户登录后,务必重新生成 Session ID。再配合 “拒绝 URL 传 ID、设置 Cookie 安全属性”,就能彻底防范这类攻击,守住用户账号安全。

原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/2701.html

Like (1)
Previous 2026年5月18日 上午10:42
Next 2026年5月19日 上午11:39

相关推荐

  • 深入掌握Nginx服务器

    本文介绍nginx服务器及其主要特性,首先给出了包管理器安装及编译安装两种方式,然后重点对 nginx 配置文件中的指令及参数进行详细说明,在了解 nginx 的工作方式后,从 n…

    2026年5月8日
    0
  • 站点为什么要安装SSL证书?

    大数据时代互联网发展迅速,给我们的生活带来便利的同时,也伴随着很多网络钓鱼、信息泄露、网络诈骗等事件的频繁发生,互联网就像一张巨型的蜘蛛网,汇聚和扩散各种各样的信息,而网站在当中就…

    2026年4月25日
    0
  • Linux的查找和定位命令有什么不一样?

    熟悉 Linux 终端与否,其实取决于你能否很好地应对混乱的目录结构。Linux 查找命令和 Linux 定位命令是你在审计安全权限、清理日志文件,或寻找你确定保存在某处的配置脚本…

    2026年3月25日
    0
  • 云服务器安全组是做什么用的?

    安全组属于一类虚拟防火墙,拥有有状态的数据包筛选能力,主要用于对云主机、负载均衡器、云数据库等资源实施网络访问管控,对实例层级的进出流量加以约束,属于关键的网络安全隔离措施。 通过…

    2026年6月8日
    0
  • cpu核数是什么意思

    CPU是什么意思?CPU是日常生活中很常见的硬件设备,台式电脑、笔记本电脑、手机、服务器中都必须要有CPU,CPU核数即一个CPU由多少个核心组成,核心数越多,代表这个CPU的运转…

    2026年5月22日
    0
  • 什么是BGP高防服务器?

    什么是BGP呢? 百度百科给出的解释是:边界网关协议(BGP)是运行于 TCP 之上的一种自治系统的路由协议。BGP 是唯一一个用来处理像互联网规模的网络的协议,也是唯一能够妥善处…

    2026年6月3日
    0
  • DDoS攻击为何抵御难度大?

    DDoS攻击属于一种普遍的网络攻击手段,它运用分布、协同的大规模攻击模式直接或间接地借助互联网上其他被控制的计算机攻击目标系统或者网络资源,拥有极高的隐匿性和极强的摧毁力。 一、分…

    2026年6月4日
    0
  • Nginx与Apache的区别,谁是主流?

    NGINX 和 Apache 是目前最流行的两款 Web 服务器软件,都属于成熟的开源项目,为全球数百万网站提供支持。根据实际需求,两者都能帮助构建强大、可扩展、高性能的 Web …

    2026年4月9日
    0
  • 如何在 Linux 服务器上部署 OpenClaw:运行自主 AI 代理的详细指南

    大多数使用 AI 工具的人都习惯了一种特定模式:输入内容,工具给出响应,然后就停止运行。除非再次发起询问,否则它不会有任何动作。OpenClaw 彻底打破了这种模式。它是一款可自行…

    2026年4月17日
    0
  • 什么是 localhost,127.0.0.1 是如何工作的?

    我们平时访问网址,本质是和互联网上某台服务器通信;而 127.0.0.1 是特殊地址 —— 发往它的请求不会离开本机,会直接原路返回,这种机制叫回环(loopback),对应的域名…

    2026年4月7日
    0