浅析CSRF漏洞的利用与防御机制
字数 1261 2025-08-26 22:11:57
CSRF漏洞的利用与防御机制详解
一、CSRF原理概述
跨站请求伪造(CSRF)是一种利用目标用户合法身份,以用户名义执行非法操作的攻击方式。
XSS与CSRF的区别
- XSS:利用站点对用户的信任,盗取cookie等信息
- CSRF:通过伪装成受信任用户的请求来攻击受信任的网站
二、CSRF攻击案例
简单转账案例
- 初始化链接:
http://www.xxx.com/pay.php?user=xx&money=100 - 恶意构造链接:
http://www.xxx.com/pay.php?user=恶意用户&money=10000
漏洞代码示例
// 会话验证(验证是该合法用户已登录)
$user = $_GET["user"];
$money = $_GET["money"];
// 转账操作
CSRF成功利用条件
- 用户已经登陆系统
- 用户访问对应URL
修改密码案例
- 攻击者修改自己密码获取修改URL
- 分析URL结构(如密码参数为
hack) - 构造恶意URL将密码参数改为
123 - 诱骗已登录用户访问该URL
三、CSRF漏洞利用方式
1. GET型CSRF利用
四种利用方式:
- a标签链接利用:
<a href="恶意URL">点击领奖</a> - iframe利用:可设置
style="display:none"隐藏<iframe src="恶意URL" style="display:none"></iframe> - img标签利用:图片加载时自动请求
- CSS background利用:通过样式加载远程内容
body { background: url("恶意URL"); }
2. POST型CSRF利用
通过伪造表单提交:
<form action="目标URL" method="post">
<input type="hidden" name="user" value="恶意用户">
<input type="hidden" name="money" value="10000">
<input type="submit" value="点击领奖">
</form>
四、CSRF漏洞探测
手动探测原理
检查Web应用是否具备以下防御措施:
- HTTP Referer头验证
- Token设置
- HTTP自定义头
- 二次验证(如JS确认弹窗)
- 验证码防御
自动化探测工具
-
CSRFTester:
- 设置浏览器代理:127.0.0.1:8008
- 登录应用并提交表单
- 在工具中修改表单内容,验证是否生效
-
Burp Suite CSRF POC:
- 抓取修改用户请求
- 生成HTML POC
- 诱骗目标用户打开
五、CSRF防御机制
1. Token防御机制
防御原理:服务器在用户登录后发放唯一令牌,每次操作验证令牌有效性。
Token生成代码:
function token_generate() {
$salt = "hello".date("h:i:s"); // 可替换为更复杂字符串
$token = md5($salt);
return $token;
}
$token = token_generate();
$_SESSION["user_token"] = $token;
表单示例:
<form action="check.php" method="post">
<input type="text" value="111">
<input type="hidden" name="user_token" value="<?php echo $token;?>">
<input type="submit" name="submit" value="提交">
</form>
验证代码(check.php):
session_start();
$user_token = $_POST["user_token"];
if($_SESSION["user_token"] == $user_token) {
echo "successful";
} else {
echo "fail";
}
2. Referer防御
防御原理:验证请求来源是否为可信域名。
防御代码:
if(strpos($_SERVER['HTTP_REFERER'], 'xx.com') !== false) {
// 合法请求
} else {
// 拒绝请求
}
3. 验证码防御
特点:
- 强制用户交互,有效防御CSRF
- 影响用户体验,通常作为辅助手段
- 适用于关键操作(如支付、修改密码等)
六、防御绕过方法
1. Token泄露
- GET型泄露:如页面包含``
- POST型泄露:利用XSS漏洞获取Cookie中的Token
2. Referer绕过
- 某些浏览器配置可能不发送Referer
- 通过中间页跳转等方式伪造Referer
七、最佳实践建议
- 关键操作使用POST方法
- 敏感操作添加验证码
- 重要功能实施二次确认
- 全站部署CSRF Token机制
- 结合使用Referer检查和Token验证
- 定期审计关键功能点
通过全面理解CSRF的攻击原理和防御机制,开发人员可以构建更加安全的Web应用程序,有效防止此类攻击带来的安全风险。