内容提要
文章介绍CSRF(跨站请求伪造)攻击:攻击者诱导已登录用户访问恶意页面,借其Cookie冒充身份向目标网站发送非预期请求。类型包括GET、POST和链接型。防御分两类:自动防御如同源检测(Origin/Referer)和SameSite Cookie;主动防御如Synchronizer Token和双重Cookie验证,后者简单但存在子域隔离与XSS风险。
延伸解读
CSRF与XSS:信任对象的差异
文章指出,XSS利用的是用户对指定网站的信任,而CSRF利用的是网站对用户网页浏览器的信任。这一区别决定了防御思路的不同:XSS需要过滤和转义用户输入,防止恶意脚本执行;CSRF则需确保请求确实由用户主动发起,而非第三方页面伪造。理解这一点,有助于在安全设计中区分两类威胁的根源。
自动防御的局限:同源检测与SameSite
同源检测依赖Origin和Referer头,但文章提醒,Referer由浏览器提供,不同浏览器实现有差异,攻击者也可能隐藏或修改它,因此并非万无一失。SameSite Cookie虽能从源头限制第三方Cookie,但存在兼容性问题,且不支持子域,多子域网站难以在主域存储登录信息。对于安全性要求高的网站,关键接口仍需额外防护。
主动防御的取舍:Token与双重Cookie
Synchronizer Token要求请求携带攻击者无法获取的Token,安全性较高,但需注意Token存储位置及用户切换时刷新。双重Cookie验证实现简单、无需Session,但文章指出其严重缺陷:难以做到子域名隔离,且若存在XSS漏洞,攻击者可篡改Cookie使防御失效。此外,采用双重Cookie最好确保整站HTTPS,否则有风险。
Q&A
CSRF攻击和XSS攻击有什么区别?
CSRF利用的是网站对用户网页浏览器的信任,而XSS利用的是用户对指定网站的信任。CSRF攻击者不能获取Cookie等信息,只是利用用户已登录的凭证冒充用户发送请求;XSS则可能窃取用户信息或篡改页面。
CSRF攻击有哪些常见的类型?
CSRF攻击主要分为三种类型:GET类型的CSRF(通过img等标签自动发起GET请求)、POST类型的CSRF(通过自动提交的表单发起POST请求)和链接类型的CSRF(诱导用户点击恶意链接触发)。
如何防御CSRF攻击?有哪些常用方法?
防御CSRF分为自动防御和主动防御两类。自动防御包括同源检测(验证Origin/Referer头)和SameSite Cookie;主动防御包括Synchronizer Token(同步令牌)、双重Cookie验证(Double Cookie Defense)和Custom Header(但后者可被绕过,已较少使用)。
SameSite Cookie防御CSRF的原理是什么?有什么局限性?
SameSite Cookie通过设置Cookie的SameSite属性(Strict或Lax)来限制第三方请求携带Cookie,从而防止CSRF。局限性包括:兼容性不佳(部分浏览器不支持),且不支持子域,导致多子域网站无法共享登录状态。
双重Cookie验证(Double Cookie Defense)是如何工作的?有什么优缺点?
双重Cookie验证在用户访问时向域名注入随机Cookie,前端请求时取出Cookie值添加到URL参数中,后端校验Cookie和参数是否一致。优点是无需Session、实施成本低、易于统一拦截;缺点是增加Cookie字段、易受XSS攻击失效、难以子域隔离、需全站HTTPS。
Synchronizer Token防御CSRF的具体步骤是什么?
Synchronizer Token防御分为三步:1. 将CSRF Token输出到页面中(通常隐藏在表单域或URL参数中);2. 页面提交请求时携带该Token;3. 服务器验证Token的有效性(解密Token,对比加密字符串和时间戳,确保未过期)。Token通常由UserID、时间戳和随机数加密生成。