浅析CSRF漏洞的利用与防御机制
字数 1261 2025-08-26 22:11:57

CSRF漏洞的利用与防御机制详解

一、CSRF原理概述

跨站请求伪造(CSRF)是一种利用目标用户合法身份,以用户名义执行非法操作的攻击方式。

XSS与CSRF的区别

  1. XSS:利用站点对用户的信任,盗取cookie等信息
  2. 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成功利用条件

  1. 用户已经登陆系统
  2. 用户访问对应URL

修改密码案例

  1. 攻击者修改自己密码获取修改URL
  2. 分析URL结构(如密码参数为hack
  3. 构造恶意URL将密码参数改为123
  4. 诱骗已登录用户访问该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应用是否具备以下防御措施:

  1. HTTP Referer头验证
  2. Token设置
  3. HTTP自定义头
  4. 二次验证(如JS确认弹窗)
  5. 验证码防御

自动化探测工具

  1. CSRFTester

    • 设置浏览器代理:127.0.0.1:8008
    • 登录应用并提交表单
    • 在工具中修改表单内容,验证是否生效
  2. 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

七、最佳实践建议

  1. 关键操作使用POST方法
  2. 敏感操作添加验证码
  3. 重要功能实施二次确认
  4. 全站部署CSRF Token机制
  5. 结合使用Referer检查和Token验证
  6. 定期审计关键功能点

通过全面理解CSRF的攻击原理和防御机制,开发人员可以构建更加安全的Web应用程序,有效防止此类攻击带来的安全风险。

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 漏洞代码示例 CSRF成功利用条件 用户已经登陆系统 用户访问对应URL 修改密码案例 攻击者修改自己密码获取修改URL 分析URL结构(如密码参数为 hack ) 构造恶意URL将密码参数改为 123 诱骗已登录用户访问该URL 三、CSRF漏洞利用方式 1. GET型CSRF利用 四种利用方式 : a标签链接利用 : <a href="恶意URL">点击领奖</a> iframe利用 :可设置 style="display:none" 隐藏 img标签利用 :图片加载时自动请求 CSS background利用 :通过样式加载远程内容 2. POST型CSRF利用 通过伪造表单提交: 四、CSRF漏洞探测 手动探测原理 检查Web应用是否具备以下防御措施: HTTP Referer头验证 Token设置 HTTP自定义头 二次验证(如JS确认弹窗) 验证码防御 自动化探测工具 CSRFTester : 设置浏览器代理:127.0.0.1:8008 登录应用并提交表单 在工具中修改表单内容,验证是否生效 Burp Suite CSRF POC : 抓取修改用户请求 生成HTML POC 诱骗目标用户打开 五、CSRF防御机制 1. Token防御机制 防御原理 :服务器在用户登录后发放唯一令牌,每次操作验证令牌有效性。 Token生成代码 : 表单示例 : 验证代码(check.php) : 2. Referer防御 防御原理 :验证请求来源是否为可信域名。 防御代码 : 3. 验证码防御 特点 : 强制用户交互,有效防御CSRF 影响用户体验,通常作为辅助手段 适用于关键操作(如支付、修改密码等) 六、防御绕过方法 1. Token泄露 GET型泄露 :如页面包含 `` POST型泄露 :利用XSS漏洞获取Cookie中的Token 2. Referer绕过 某些浏览器配置可能不发送Referer 通过中间页跳转等方式伪造Referer 七、最佳实践建议 关键操作 使用POST方法 敏感操作 添加验证码 重要功能 实施二次确认 全站部署 CSRF Token机制 结合使用 Referer检查和Token验证 定期审计 关键功能点 通过全面理解CSRF的攻击原理和防御机制,开发人员可以构建更加安全的Web应用程序,有效防止此类攻击带来的安全风险。