csrf漏洞利用

  发布时间:2026-10-17 06:21:04   作者:玩站小弟   我要评论
2008年,一个叫Bob的程序员打开了他常逛的论坛。有人发了个帖子,标题很吸引人,他点进去看了一眼,觉得没啥意思就关了。第二天他发现,自己在这个论坛的账号自动发了一篇广告帖——推广某种他听都没听过的保 。

2008年,漏洞利用一个叫Bob的漏洞利用程序员打开了他常逛的论坛。有人发了个帖子,漏洞利用标题很吸引人,漏洞利用他点进去看了一眼,漏洞利用觉得没啥意思就关了。漏洞利用第二天他发现,漏洞利用自己在这个论坛的漏洞利用账号自动发了一篇广告帖——推广某种他听都没听过的保健品。他改了密码,漏洞利用以为没事了。漏洞利用一周后同样的漏洞利用事情再次发生。Bob不知道的漏洞利用是,他点开那个帖子的漏洞利用瞬间,浏览器已经替他向论坛服务器发送了一个"发帖"请求,漏洞利用而他登录论坛的漏洞利用Cookie还好好地在浏览器里挂着。

这就是CSRF——跨站请求伪造。说人话就是:你登录了A网站,浏览器存了你的身份凭证(Cookie)。这时候你访问了B网站,B网站里藏了一段代码,让你的浏览器偷偷向A网站发了一个请求。浏览器一看,你之前登录过A啊,Cookie还在,于是自动带上Cookie把请求发了出去。A网站收到请求,验证Cookie有效,以为是你自己操作的,就照做了。整个过程你毫不知情。

关键点在于:浏览器发请求时自动携带目标站点的Cookie,这是HTTP协议的设计,不是bug。CSRF攻击者利用的正是这个机制。他不需要偷你的Cookie,只需要让你"主动"发出请求就行。

一个最小的攻击场景

假设某个银行转账接口是这样的:

GET /transfer?to=XXX&amount=1000 HTTP/1.1 Host: bank.com Cookie: session=abc123

只要登录状态下访问这个URL,钱就转走了。攻击者只需要在任意网页里放一行代码:

<img src="https://bank.com/transfer?to=hacker&amount=10000">

你打开这个页面,图片加载失败,你什么都看不到。但请求已经发出去了。Cookie自动带上,银行服务器验证通过,钱没了。用img标签是因为它不受同源策略限制,可以跨域加载资源。这是最经典的CSRF利用方式。

当然现在大部分银行不会用GET做转账。但很多网站的其他敏感操作仍然存在这类问题——修改邮箱、修改密码、发帖、关注、点赞、删除数据。2019年某社交平台就出过一个漏洞:关注接口没有CSRF防护,攻击者构造一个页面,访问者一打开就自动关注了几十个营销账号。后来这个漏洞被提交到HackerOne,拿了5000美元赏金。

POST请求也不安全

有人觉得把接口改成POST就安全了。不是的。攻击者可以在自己的页面上放一个隐藏表单,用JavaScript自动提交:

<form action="https://target.com/api/change-email" method="POST" id="f"> <input name="email" value="hacker@evil.com"> </form> <script>document.getElementById('f').submit();</script>

你打开页面,表单瞬间提交,邮箱被改了。然后攻击者用"忘记密码"功能,重置密码链接发到新邮箱,账号到手。整个过程不到两秒。

还有一种更隐蔽的方式:用XMLHttpRequest或fetch发请求。虽然浏览器有同源策略限制,默认不允许跨域读取响应,但请求本身是发出去的。对于CSRF来说,攻击者根本不关心响应内容,他只关心请求有没有被执行。所以同源策略在这里拦不住CSRF。

为什么现在CSRF没以前那么猖獗了

两个原因。一是主流框架默认加了CSRF Token——表单里嵌一个随机值,服务器验证这个值是否匹配。攻击者的页面拿不到这个Token,请求就会被拒。二是SameSite Cookie属性的普及。Chrome从80版本开始默认把没有声明SameSite的Cookie当作Lax处理,跨站请求不再自动携带Cookie。这一刀砍下去,很大一部分CSRF直接失效了。

但CSRF没有消失。SameSite=Lax只拦截跨站的POST请求和部分GET请求,如果目标站点自己把Cookie设成了SameSite=None,防护就归零。CSRF Token如果实现有缺陷——比如Token不跟用户会话绑定、或者Token可预测——照样能被绕过。2022年还有安全研究员在某个开源CMS里发现了Token校验逻辑漏洞,可以通过注册两个账号来预测另一个用户的Token值。

我自己的判断是:CSRF的门槛低、原理简单,但正因为它简单,反而容易被开发者忽略。尤其是内部系统、老系统、快速迭代的产品,往往只顾着实现功能,忘了在敏感接口上加防护。攻击者也不需要多高的技术,一个img标签就够了。防CSRF的核心就一条:让服务器能区分"这个请求是用户自愿发的"还是"被第三方页面骗着发的"。Token也好,SameSite也好,自定义Header也好,本质都是在加一个攻击者伪造不了的验证维度。

  • Tag:

相关文章

  • 怎么通过代码提取网页图片

    怎么通过代码提取网页图片 我上周帮朋友抓一个设计网站的素材图,结果发现对方用了懒加载——直接请求HTML根本拿不到图片。这让我意识到,提取网页图片这事,光会正则表达式远远不够。真正的难点不在“提取”
    2026-10-17
  • 怎么搭建属于自己的网站

    怎么搭建属于自己的网站 我去年帮一个开咖啡馆的朋友搭了个网站,总共花了不到三百块,前后用了四个下午。他后来靠网站上的“隐藏菜单”页面,多拉了三成回头客。这事让我确信,搭网站早就不该是程序员专属的魔法了
    2026-10-17
  • mdns服务检测漏洞修复

    办公室的打印机突然开始自动打印乱码,IT小哥查了半天,最后在交换机上抓包才发现——隔壁工位那台新买的智能投影仪,正通过mDNS协议疯狂向全网宣告自己的存在。这不是巧合。mDNS多播DNS)服务,这个藏
    2026-10-17
  • Android开发者网站

    凌晨三点,我盯着Android开发者网站上那个红色的构建失败提示,第无数次怀疑自己为什么要选这个平台。但第二天早上,当我在官方文档里翻到那个冷门的WorkManager用法时,又觉得一切都值了。这就是
    2026-10-17
  • sql数据库搭建

    SQL数据库搭建这件事,说穿了就是三步:装软件、建库、建表。但真动起手来,坑比想象中多。我见过太多人卡在第一步——装了个MySQL,结果连不上,折腾半天发现是端口被占,或者密码策略太严。 先别急着敲命
    2026-10-17
  • 美军轰炸俄军基地

    凌晨四点十七分,黑海沿岸的某处俄军前线机场突然炸成一片火海。这不是演习,也不是误炸——美军B-52H战略轰炸机从英国费尔福德基地起飞,横跨整个欧洲大陆,在波兰边境上空发射了十二枚AGM-158B联合空
    2026-10-17

最新评论