双重提交Cookie模式是否真的安全?关于其攻击场景的疑问
你核心的误解在于忽略了浏览器的Cookie同源策略:
- 当用户访问a.com时,浏览器生成的
cookie=user和csrf-cookie=csrf这两个Cookie,只会在请求a.com(或其子域)的资源时自动发送,绝对不会在用户访问第三方域名(比如攻击者的b.com)时,把a.com的Cookie发送给b.com。 - 攻击者在b.com的页面里,根本没办法通过任何手段读取到受害者浏览器里a.com的Cookie——同源策略直接禁止了跨域读取Cookie的行为(除非站点刻意配置了跨域共享的特殊规则,但这不属于常规的双重提交Cookie防护场景)。
- 更关键的是:攻击者在自己的浏览器里,完全拿不到受害者浏览器中的a.com Cookie,两个浏览器的Cookie存储是完全隔离的,不存在“获取”的可能。
再明确下双重提交Cookie模式的逻辑:
服务器会校验两个地方的CSRF值:一是请求自动携带的Cookie中的CSRF值,二是请求头/请求体里提交的CSRF值,只有两者一致才会通过校验。攻击者既没法拿到受害者的Cookie(也就不知道正确的CSRF值),也没法在跨域请求里伪造包含正确CSRF值的请求头/体(因为跨域请求的自定义头会被浏览器拦截,除非通过CORS放行,但CORS不会允许第三方站点随意伪造这类请求),所以没法绕过防护。
内容的提问来源于stack exchange,提问作者revw
相关产品推荐
相关产品推荐

