知识卡片
CSRF的根因:浏览器自动携带同源cookie,与请求发起来源无关
内容
跨站请求伪造(CSRF)能够生效的根本原因,不在于黑客窃取到了用户的身份凭证,而在于浏览器本身的一个基础机制:只要一个请求发往某个域名,浏览器就会自动把这个域名下已经保存的cookie一并带上,而不会去检查这次请求究竟是用户在这个网站自己发起的、还是被嵌在另一个网站(甚至一张伪装成签名图片的img标签)里悄悄触发的。这意味着黑客根本不需要知道用户的身份凭证,只需要诱导已登录用户的浏览器去请求一个”看起来像正常业务请求”的链接(比如退出登录、转账操作对应的URL),浏览器就会带着用户真实的登录凭证把这个请求发出去,服务器端如果只依赖cookie本身来判断请求合法性,就会把这次伪造请求当成用户本人发起的合法操作来执行。这个案例揭示了一条通用的安全设计原则:一个凭证如果只需要”存在于浏览器里、会被自动附加到请求上”就足以被服务器信任,这个凭证本身其实无法证明”这次请求确实是用户主动、知情地发起的”,只要还有其他页面能够诱导浏览器发出携带这份凭证的请求,服务器端单靠这份凭证做合法性判断就是不够的。
参考来源
- 位置:《高可用架构(第1卷)》第7章《安全与网络》"7.5 互联网主要安全威胁分析及应对方案"节,"7.5.1 互联网Web应用面临的主要威胁","3.CSRF"(源文件:_epub-src/OEBPS/Text/Chapter7_5_2.xhtml)
- 结论依据:原文说明"此类漏洞造成的原因是在任意网站上请求一个资源时,浏览器在发送请时都会带上该域名的用户cookie,所以黑客有可能在任意网站上插入有CSRF漏洞的请求来伪造用户请求",直接支撑本卡片结论。
- 原始内容:此类漏洞造成的原因是在任意网站上请求一个资源时,浏览器在发送请时都会带上该域名的用户cookie,所以黑客有可能在任意网站上插入有CSRF漏洞的请求来伪造用户请求。