也被称为One Click Attack或Session Riding。又常缩写为XSRF。
是一种对网站的恶意利用,与XSS的不同是,XSS攻击利用的是站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。
CSRF的原理
攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作,包括:盗取目标用户的账户,以目标用户的名义发送邮件信息,转移虚拟货币等。泄露目标用户多的个人隐私并威胁其财产安全。
例如:
你登录了网站 A(比如银行后台),浏览器保存了你登录后的 Cookie。
攻击者诱导你访问恶意网站 B。网站 B 在后台悄悄发起一个针对网站 A 的请求 (例如转账、改密码)。
浏览器会自动带上你在 A 站点的 Cookie ,网站 A 误以为是你本人发起请求,执行操作。
核心:利用浏览器自动携带 Cookie 的特性,冒用受害者身份发起请求;攻击者拿不到 Cookie,只是借用身份。
CSRF漏洞攻击过程的关键点:
目标用户已经登录了网站,能够执行网站的功能。
目标用户访问了攻击者构造的URL。
例如:
你想给某位用户转账 100 元,那么单击 "转账" 按钮后,发出的 HTTP 请求会与 pay.php?user=xx&money=100 类似。而攻击者构造链接 pay.php?user=hack&money=100,当目标用户访问了该 URL 后,就会自动向攻击者的账号转账 100 元,而且这只涉及目标用户的操作,攻击者并没有获取目标用户的 Cookie 或其他信息。
CSRF练习
使用用户密码登录该账户后会进入一个添加用户的管理界面



1.抓包捕获正常添加用户请求
在页面填写用户名、密码并点击提交,使用 Burp Suite 拦截表单提交数据包。
正常业务请求:POST /adduser.php,携带参数 username=teest2&password=12345,浏览器自动附带当前登录状态的PHPSESSID会话 Cookie。

2.利用 Burp 自动生成 CSRF POC HTML
1.在捕获到的请求上右键选择:相关工具(Engagement tools) → 生成CSRF POC
2.Burp 自动生成一段 HTML 代码:内含自动提交的 Form 表单,目标地址、表单参数和正常抓包请求完全一致,并附带 JS 实现页面加载后自动提交表单。
CSRF POC = 用于复现 CSRF 漏洞的概念验证代码,证明目标站点存在 CSRF 漏洞 。
原理:该 HTML 页面会在打开时,静默向目标网站发起添加用户的 POST 请求。
关键点:HTML 页面本身不携带 Cookie,Cookie 由访问页面的浏览器自动附加。


3.部署 POC 页面,同一浏览器访问
将生成的 CSRF 攻击 HTML 文件放到另一台虚拟主机(恶意站点),攻击者通过聊天、邮件等方式诱导已经登录后台管理系统 的管理员,在同一个浏览器中访问该 html 地址。页面加载后自动提交伪造表单发起新增用户请求,浏览器会自动携带目标网站的登录会话 Cookie,服务端仅凭 Session 判断身份,误认为是管理员主动发起操作,最终执行添加用户的恶意行为。
前提条件:浏览器此时仍然保持登录目标后台(192.168.143.150)。
当浏览器打开恶意页面:
页面自动执行 JS 提交表单,跨站向adduser.php发起新增用户请求;浏览器自动带上目标站点的登录 Cookie,模拟合法用户操作。


4.验证漏洞效果
请求发送完成后,目标网站提示 test6添加成功。
服务器识别请求携带合法会话 Cookie,认定是已登录管理员发起操作,成功创建攻击者指定的用户账户。

总结:

登录处理逻辑
isset($_POST'loginsubmit')判断页面是否收到登录表单提交(用户点击登录按钮)。
数据库查询到匹配用户,登录成功,给会话变量赋值:$_SESSION'isadmin' = 'admin';该数据会保存在服务器端 Session 文件,浏览器只持有对应的PHPSESSID Cookie。
页面权限鉴权逻辑
每次访问该页面时,读取当前会话中的 isadmin:如果值等于 admin:鉴权通过,展示添加用户功能入口,如果不是 admin:提示 "请先登录",禁止访问管理功能。
漏洞成因:目标网站没有部署 CSRF 防护机制 (无 CSRF Token、未校验 Origin/Referer 头),服务器仅依靠 Cookie 鉴别用户身份。
CSRF 攻击核心逻辑:
攻击者无法获取用户 Cookie,但是诱导用户在已登录状态访问恶意页面 ,驱使浏览器自动跨站发起请求,借用用户身份执行业务操作。
修复建议: 后端增加 CSRF 随机 Token 校验、校验请求 Origin/Referer、配置 Cookie SameSite 属性,敏感操作增加二次密码 / 验证码验证。
CSRF--增加referer的检查
Referer:来源页面地址
记录:用户是从哪个页面点击、跳转,访问当前接口的。

同样的操作,但是不能执行

1、这次 CSRF 请求里:$_SERVER'HTTP_REFERER' = "http://192.168.143.1/stu/src.html"
$_SERVER'HTTP_HOST' = "192.168.143.150:8003"
2、自动拼接出来的正则/^http:\/\/192.168.143.150:8003/i
3、匹配对比:待匹配字符串:http://192.168.143.1/stu/src.html
正则要求开头:http://192.168.143.150:8003
字符串开头不一致,匹配失败
preg_match() 返回 0
!0 条件成立 → 执行 exit("Referer error");