跨站请求伪造(CSRF)是Web安全领域最经典的攻击手法之一。它利用浏览器对已登录网站的信任,在用户不知情的情况下执行非本意操作。本文将从Cookie机制与同源策略等基础知识切入,深入剖析CSRF的攻击原理、常见类型与进阶手法,并结合Java、Python、Go等语言的最佳实践,系统梳理防御策略。读完本文,你将能够使用Pikachu靶场进行实战演练,真正掌握CSRF的攻防之道。
一、前置知识:Cookie、Session与同源策略要理解CSRF,必须先了解浏览器如何维持用户状态并实现安全隔离。
Cookie与Session:Cookie是服务器保存在用户浏览器中的一小块数据,常用于维持登录态。Session则是服务器端为每个会话创建的数据存储。CSRF攻击的核心,正是利用浏览器在请求中自动携带Cookie的机制,伪装成已认证用户。同源策略:这是浏览器最核心的安全策略,要求协议、域名、端口三者完全一致,才能相互读取数据。同源策略限制了跨域脚本对Cookie等敏感数据的访问,是防御XSS和CSRF的基石。但如果网站存在逻辑漏洞,攻击者可以诱使用户的浏览器“代为”发起请求,从而绕过同源策略的部分限制。二、CSRF攻击原理深度解析CSRF(Cross-Site Request Forgery)即跨站请求伪造。攻击者诱导受害者进入第三方网站,在受害者不知情的情况下,以受害者的身份向目标网站发送恶意请求。
攻击的三个必要条件:
漏洞存在:目标网站有可被预测和伪造的敏感操作请求(如修改密码、转账),且不验证请求的真实意图。用户已登录:受害者已登录目标网站,浏览器中存有有效会话Cookie。诱导触发:受害者访问了攻击者构造的恶意页面或链接。攻击流程简述:
用户登录信任网站A,网站A在用户浏览器设置Cookie。用户在不登出A的情况下,访问恶意网站B。网站B的页面中包含一个指向A的恶意请求(如自动提交的表单或标签的src)。用户的浏览器在访问B时,会自动携带网站A的Cookie向A发起这个恶意请求。网站A的服务器收到带有正确Cookie的请求,误以为是用户操作,执行了该请求(如修改密码、转账)。 常见攻击场景:修改密码、添加用户、转账支付、关注/订阅操作等。
三、CSRF攻击类型与实例根据请求方式,CSRF主要分为GET型和POST型。
1. GET型CSRF这是最简单、最常见的一种。敏感操作通过URL参数传递,攻击者只需构造一个包含目标URL的链接或资源标签(如、
实例:一个修改密码的请求为http://target.com/change_pass?new_pass=123。攻击者可以构造一个包含此链接的图片:。用户一旦访问嵌入此图片的页面,密码在不知情下被修改。
2. POST型CSRF当网站使用POST方法提交表单时,攻击难度稍增,但依然可利用。攻击者需要构造一个隐藏的表单,并通过JavaScript自动提交。
实例:银行转账使用POST表单。攻击者可以构造一个隐藏的