同源策略与 CSRF 跨站请求伪造机制
引言
在 Web 应用的安全体系中,浏览器实施的“同源策略”(Same-Origin Policy)是保障用户数据安全的核心基石。它如同一道无形的防火墙,严格限制不同源的文档或脚本之间进行交互,有效防止了恶意的跨站数据窃取。然而,当应用逻辑存在缺陷,未能对请求的来源和意图进行严格校验时,攻击者便能利用用户已登录的身份,诱导其浏览器在不知情的情况下发起非本意的操作,这就是“跨站请求伪造”(CSRF)攻击。
这篇文章将深入剖析 CSRF 漏洞的完整攻击链。我将从同源策略的基本原理讲起,揭示 CSRF 是如何绕过这一安全机制的。随后,将通过一系列模拟靶场的实战演练,详细演示两种最常见的攻击手法:
- GET 型 CSRF:利用简单的 URL 链接即可触发恶意操作。
- POST 型 CSRF:通过构造恶意 HTML 页面,利用 Burp Suite 等专业工具生成 Payload,执行更复杂的请求。
无论是篡改用户个人资料,还是进行恶意的资金转账,本文将一步步拆解攻击者的视角与操作步骤,帮助大家理解 CSRF 的危害、成因及防御要点。
同源策略
同源策略介绍
同源策略:浏览器的核心安全规则,用来阻止不同网站之间非法互相访问数据,防止跨站窃取信息、CSRF、XSS 等攻击。
同源策略比较
同源策略:需要对比两者中的【域名】【端口】【协议】三者完全相同才可以认为是同源的。
比较下方表格中哪个链接与此链接同源 http://www.example.com/index/index.php:
| 源 | 是否同源 | 原因 |
|---|---|---|
| http://test.example.com/admin/index.php | 否 | 域名不同 |
| https://www.example.com/admin/index.php | 否 | 协议不同 |
| http://www.example.com:8080/admin/index.php | 否 | 端口不同 |
| http://www.example.com/test/index.php | 是 | 三者相同 |
跨站请求伪造
漏洞介绍
跨站请求伪造(Cross Site Request Forgery) 是一种通过挟持当前用户已登录的Web应用程序从而实现非用户本意的操作的攻击方法。简单说就是利用用户已登录的身份,诱导用户在不知情的情况下,在目标网站执行非自愿操作。
具体过程如下:
- 你登录了个人后台 / 论坛 / 支付网站,浏览器保存了登录 Cookie。
- 你点开攻击者发的一张图片、链接、恶意网页。
- 这个页面偷偷向目标网站发起请求(比如改密码、转账、发帖子、退出登录)。
- 浏览器自动带上你的登录 Cookie,网站以为是你本人操作,请求直接生效。
漏洞危害
CSRF 能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全等等等等。可以说 CSRF 能够做什么,取决于你在网站里能做什么操作。
漏洞成因
CSRF 漏洞一般是由于没有检查 Referer 以及未在头部设置 token 造成的。
漏洞要素
- 操作:你想让受害者做什么,转账、修改密码等。
- 认证:基于 cookie 的会话处理,因为要携带 Cookie 进行访问,其他认证字段是无法携带的,所以需要那个应用程序仅通过 cookie 进行会话处理。
- 没有不可预测的参数:因为要事先构造请求,所以不能含有不可预测的参数,比如密码等。
GET 型 CSRF
由于不可能给大家找真实的授权的靶机,我就找个靶场给大家演示一下吧
受害者视角
打开靶场,登录。

查看个人信息,看到自己的信息。

攻击者视角
打开无痕浏览器,攻击者 B(hacker/123456)也登录网站,可以看到自己的个人信息。

在更新个人资料的地方,点击【通过GET更新】个人资料,获取到 URL。

更新个人资料的 URL 如下:
1 | http://e9fb9eb7ddf3.target.yijinglab.com/profile.php?action=update&email=hacker@evil.com&bio=专业黑客 |
- 攻击者构造 CSRF 攻击的 payload:
1 | http://e9fb9eb7ddf3.target.yijinglab.com/profile.php?action=update&email=hack@qq.com&bio=你被黑客攻击了 |
攻击结果
黑客将构造的 payload 发送给受害者,受害者点击访问。

POST 型 CSRF
受害者视角
打开靶场,登录。

查看个人信息,看到自己的信息。

攻击者视角
使用用户名 hacker 密码 123456 登录后进入个人中心编辑资料。

选择 POST 型 CSRF 漏洞部分,修改个人简介,并且使用 BP 抓包。

使用 BURP 构造恶意 POC。

复制 POC 内容,保存到本地为 1.html。

攻击结果
将 1.html 文件,发送给受害者,诱导点击提交。

可以发现邮箱和个人简介被修改了。

CSRF 的其他操作
打开靶场,使用【hacker】用户登录,密码 123456,可以看到余额是 500 元。

选择【快速转账】填写给【hacker】用户转账 200 元。

点击【立即转账】并且抓取对应的数据包。

使用 BP 生成对应的 POC。

将 POC 复制到自己创建的 1.html 文件中,并且保存。

使用【victim】用户登录系统,可以看到余额是 1000 元。

诱导【victim】用户点击 1.html 文件。

刷新页面发现少了 200 元。

切换到【hacker】用户,发现余额多了 200 元。

浏览器跨域信任问题解决方法
Edge
在地址栏输入:
1 | edge://flags/#block-insecure-private-network-requests |
Chrome
在谷歌浏览器地址栏输入:
1 | chrome://flags/#allow-insecure-private-network-requests |
然后将 Allow insecure private network requests 设置为 Enabled。










