[LAB] 攻击模拟 / CSRF 攻击演示
跨站请求伪造
CSRF 利用用户已登录的身份,在用户不知情的情况下诱导其向目标网站发起恶意请求。 模拟银行转账场景,展示攻击者如何生成恶意页面。
[!] CSRF 攻击前提:用户已登录目标网站且 Cookie 仍有效。攻击者只需要诱导用户访问恶意页面即可。
攻击者视角:生成恶意页面
攻击者构建一个银行转账表单(自动提交),诱骗已登录银行的用户访问。
恶意 POC 代码:
💼 受害者视角:点击后被转账
假设你已经登录了银行网站。攻击者通过邮件/聊天发给你一个"链接"。 点击后……(请先在左侧生成 POC 并复制代码到下方)
💰 账户余额
¥100,000
¥100,000
🛡️ CSRF 防御方案
⚠️ 为什么会被攻击?
- 浏览器访问 bank.com 时自动携带 Cookie
- 恶意页面提交表单到 bank.com,浏览器认为合法
- 服务端没有验证请求来源的合法性
- 无任何身份二次确认
🛡️ 如何防御?
- CSRF Token:每次表单生成随机 Token,提交时验证
- SameSite Cookie:设置 SameSite=Strict
- 验证码:敏感操作二次验证(短信/邮箱)
- Referer 验证:检查 HTTP Referer 头
✅ PHP 安全代码示例
<?php
// 生成 Token
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// 验证请求
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'] ?? '')) {
die('CSRF 验证失败!');
}
?>
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">