CSRF(跨站请求伪造)攻击利用用户已认证的身份,在不知情时执行恶意操作。攻击者诱使用户访问特定页面,浏览器自动携带Cookie向目标网站发送伪造请求,导致密码修改、资金转账等未授权操作发生。
CSRF原理
CSRF生效依赖三个核心条件:用户登录目标网站并保持会话有效;攻击者精准预测请求参数结构;用户主动触发恶意请求(如点击链接/加载图片)。关键攻击载体包括:
自动触发型:<img src="http://csuab.com/transfer?to=attacker&amount=10000">
表单伪装型:隐藏表单配合JavaScript自动提交
文件利用型:恶意PDF嵌入跨域请求
网站测评CSRF跨站攻击模拟测试流程
会话状态验证:
登录被测系统后,打开新标签页尝试重放关键操作请求(如修改邮箱)。若成功执行,证明会话管理存在风险。
恶意请求构造:
使用Burp Suite的Generate CSRF PoC功能,自动生成携带攻击参数的HTML页面。确认参数是否可预测(如使用固定账号ID)。
同源策略绕过测试:
修改Content-Type为text/plain或multipart/form-data,验证服务端是否严格检查请求格式。
防护机制探测:
删除请求中的Token、Referer字段,观察操作是否仍可执行。
防护策略
CSRF Token强制校验:
在关键操作的表单/请求中植入随机Token(至少128位),服务端严格验证Token有效性及绑定关系。Token存储于服务端Session,拒绝复用。
同源检测强化:
校验Origin头(优先)或Referer头,拒绝非白名单域名的请求(如.trusted.com)。注意配置反向代理时保留原始头信息。
关键操作二次认证:
敏感操作(如提现、改密)强制要求输入密码或短信验证码,建立操作意图确认机制。
Cookie安全属性加固:
为会话Cookie设置SameSite=Strict(或Lax),阻止第三方上下文携带。敏感操作Cookie启用SameSite=Strict。
自定义头验证:
添加X-Requested-With: XMLHttpRequest等自定义头,服务端拒绝缺失该头的请求。
防护方法:
框架级防护:启用Spring Security的csrf().enable()或Django中间件,自动化Token管理。
权限隔离:普通操作与敏感操作使用独立会话层级。
监控审计:记录关键操作IP、设备指纹与操作时序,识别异常行为链。
防御本质:对抗CSRF的核心在于打破"请求即用户意愿"的信任链条。每一次严格的同源校验与Token验证,都是对操作意图的真实性确认。将防护深度融入业务逻辑设计,方能彻底终结跨站伪造威胁。