CSRF(跨站请求伪造)详解:原理、攻击方式与防御手段

时间:2025-03-18 22:20:09

???? 什么是 CSRF?

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种“偷懒攻击”方式,黑客利用你已经登录的身份,在你不知情的情况下,让你执行某些本不想做的操作。

???? 你可以把 CSRF 理解成“钓鱼网站 + 偷用身份”!

???? 真实案例:银行转账攻击

???? 假设你登录了银行网站 bank.com

  1. 你输入密码登录,银行网站给你存了一个 Cookie,之后不需要每次输入密码即可转账。

  2. 黑客创建了一个惨惨的名称叫 bad-hacker.com 的恶意网站。

  3. 你无意中点击了这个恶意链接(比如邮件中的钓鱼网址)。

  4. 该恶意网站偷偷发送如下请求到 bank.com

    <img src="https://bank.com/transfer?to=hacker&amount=1000" />
  5. 你的浏览器自动携带 bank.com 的 Cookie,银行服务器以为是你本人操作,直接执行转账!

???? 这样,你的银行账户就被黑客利用,钱被转走了!

???? CSRF 攻击的核心条件

要发生 CSRF 攻击,需要满足以下条件:

  1. 用户已登录,浏览器里有 Cookie(如已登录银行网站)。

  2. 网站通过 Cookie 验证身份(没有要求额外的身份验证)。

  3. 服务器没有额外的 CSRF 保护机制(如 CSRF Token)。

???? 如何防止 CSRF?

✅ 方法 1:使用 CSRF Token

银行可以要求所有“敏感操作”请求都带上一个额外的 CSRF Token,只有正确的 Token,才会执行操作。

<form action="https://bank.com/transfer" method="POST">
    <input type="hidden" name="csrf_token" value="a1b2c3d4">
    <button type="submit">转账</button>
</form>

???? 为什么 CSRF Token 有效?

  • Token 只能在 bank.com 生成,黑客无法获取。

  • 黑客无法跨站访问 bank.com 的 Token(受同源策略保护)。

  • Token 通常是动态变化的,避免被黑客重复利用。

✅ 方法 2:检查 Referer 头

银行可以检查请求来源,确保请求来自自己的网站。

Referer: https://bank.com/

如果请求来源是 bad-hacker.com,服务器就拒绝操作。

✅ 方法 3:SameSite Cookie 保护

银行可以在设置 Cookie 时,要求 Cookie 只能用于同源请求。

Set-Cookie: sessionid=abc123; SameSite=Strict

这样,即使黑客诱骗你访问 bad-hacker.com,该网站也无法使用你的 Cookie,攻击失效!

???? 总结

问题 答案
CSRF 是什么? 黑客利用你的身份,在你不知情的情况下,让你执行敏感操作。
CSRF 的攻击流程? 你登录 bank.com → 访问 bad-hacker.com → 浏览器带着 Cookie 访问 bank.com → 服务器误以为你本人操作。
如何防御 CSRF? 使用 CSRF Token、检查 Referer、SameSite Cookie 保护。

???? CSRF 是一个常见的安全漏洞,但只要合理使用防御手段,就能有效防止攻击!

???? 你学会了吗?如果有不理解的地方,可以留言交流哦!