超硬核科普:CSRF攻击防御指南 🛡️(附实战代码)
0x00 先搞懂啥是CSRF攻击?
CSRF(跨站请求伪造)就像黑客给你下了一个“自动转账咒”!假设你刚登录网银没关页面,这时候点了个“神秘链接”,浏览器就会偷偷用你的登录状态给网银发个转账请求——钱就飞了!
攻击三要素:
✅ 你已登录(Cookie还在)
✅ 网站没有二次验证(比如改密码不用输原密码)
✅ 请求参数可预测(比如转账接口是/transfer?to=坏人&money=10000)
举个🌰:你在某宝保持登录,点开“免费抽iPhone”链接,结果链接里藏了自动转账代码,钱就没了...(是不是像魔法攻击?)
防御CSRF的五大绝招 🔥
1️⃣ CSRF Token(必杀技)
原理:给每个请求发个“动态密码”,像银行U盾一样!
代码实战(PHP示例):
// 生成随机Token存入Session
session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// 前端表单隐藏字段
echo '<input type="hidden" name="csrf_token" value="'.$_SESSION['csrf_token'].'">';
// 服务端验证
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF攻击!滚粗!");
}
关键点:
- Token必须随机切绑定用户Session
- 每次提交刷新Token防重放攻击
- 别把Token放Cookie里
2️⃣ SameSite Cookie(浏览器Buff)
原理:让Cookie只认自家门牌号!
设置方法:
Set-Cookie: sessionid=abc123; SameSite=Lax; Secure
三种模式:
- Strict:跨站绝不带Cookie(连自家链接都要重登录)
- Lax:只允许安全跳转(比如 a 标签)带Cookie
- None:关闭防护(必须配合HTTPS) 2025年现状:Chrome默认Lax,攻击成功率暴跌80%!
3️⃣ 双重验证(物理防御)
✅ 验证码:重要操作前弹验证码(比如转账)
✅ 二次密码:改密码必须输原密码
✅ 短信验证:关键操作发短信验证码
适用场景:
- 金融类敏感操作
- 管理员权限变更 虽然用户体验降级,但安全性拉满!
4️⃣ Referer/Origin检查(辅助技)
原理:查请求身份证(来自哪个页面)
代码示例:
// 检查Referer是否来自本站
$referer = parse_url($_SERVER['HTTP_REFERER']);
if ($referer['host'] !== 'yoursite.com') {
die("非法来源!");
}
// 或者检查Origin头(更可靠)
if ($_SERVER['HTTP_ORIGIN'] !== 'https://yoursite.com') {
die("跨站攻击!");
}
注意:
- 某些浏览器会隐藏Referer
- Origin头只存在于CORS请求
- 可被伪造,不能单独依赖!
5️⃣ HTTP方法限制(防君子)
把敏感操作从GET改成POST!
错误示范:
GET /delete_user?id=1 # 点个链接就能删号!
正确姿势:
<form action="/delete_user" method="POST">
<input type="hidden" name="id" value="1">
<button>删号</button>
</form>
虽然POST也能被伪造(比如用隐藏表单),但至少提高了攻击门槛~
最后总结~ 记住:
- 别用弱随机数生成Token(用SecureRandom)
- Token要绑定用户Session(别全局统一)
- 定期做渗透测试!
这次先这样,撂了
感谢浏览和学习,作者:鱼油YOU,转载请注明原文链接:https://www.cnblogs.com/OmegaYOU3/p/18864900,或者可以➕主播WX:OmegaAnimeman_desu;QQ:3819054512
浙公网安备 33010602011771号