九江一站式团建服务指南:吃喝玩乐全包含攻略
2026/6/23 13:15:53
你的“已登录身份”,可能正在被悄悄滥用。本文带你彻底搞懂CSRF攻击的本质与防御之道。
小明登录了银行网站,办理完业务后未退出。
随后他点开朋友发的“超萌猫咪视频”链接(实为钓鱼页面)。
页面中隐藏了一段代码:
<imgsrc="https://your-bank.com/transfer?to=attacker&amount=5000"width="0"height="0">结果:浏览器自动携带小明的银行Cookie发起转账请求——钱没了,而小明毫无察觉。
这就是典型的CSRF(Cross-site Request Forgery)跨站请求伪造攻击。
💡CSRF vs XSS:
XSS是“盗取你的钥匙开门”,CSRF是“骗你亲手开门”。前者窃取凭证,后者滥用凭证。
res.cookie('auth_token',token,{httpOnly:true,// 阻断XSS窃取(防XSS)secure:true,// 仅HTTPS传输(防中间人)sameSite:'Strict',// 严格模式:跨站不发Cookie// sameSite: 'Lax' // 宽松模式:允许安全GET跳转(如链接),推荐多数场景maxAge:7*24*60*60*1000,path:'/'});<a href>等安全GET跳转,阻止POST/iframe等危险请求// 前端(Axios示例)axios.post('/transfer',data,{headers:{'X-CSRF-Token':getCsrfToken()}// 从meta或cookie读取});// 后端(Express示例)app.post('/transfer',csrfProtection,(req,res)=>{...});// 使用csurf中间件自动验证X-Requested-With: XMLHttpRequest(仅对AJAX有效)| 误区 | 正解 |
|---|---|
| “设置了httpOnly就能防CSRF” | ❌ httpOnly防XSS,CSRF恰恰依赖浏览器自动发Cookie |
| “API用JWT就安全” | ⚠️ 若JWT存Cookie仍需SameSite;若存LocalStorage+Authorization头,天然免疫CSRF(但需防XSS) |
| “SameSite=Strict万能” | ❌ 旧浏览器不支持,且Strict模式影响正常跳转体验 |
| “GET请求无害” | ❌ 若业务用GET做删除/转账,SameSite=Lax也无法防护 |
SameSite=Lax+Secure+HttpOnlyCSRF攻击利用的是“信任链”的断裂——我们信任用户浏览器,却未验证操作意图。
真正的安全 = 技术防御(SameSite+Token) + 架构设计(无状态API) + 安全意识。
🌐延伸思考:
随着SPA和Token-Based认证普及,CSRF风险在降低,但传统Cookie Session架构仍广泛存在。理解CSRF,不仅是防御攻击,更是培养“最小信任原则”的安全思维。