写点什么

教你轻松解决 CSRF 跨站请求伪造攻击

  • 2022 年 4 月 21 日
  • 本文字数:1767 字

    阅读完需:约 6 分钟

本文分享自华为云社区《CSRF跨站请求伪造攻击及防御》,作者: HZDX。


CSRF(Cross-site request forgery)跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比 XSS 更具危险性。

什么是 CSRF 跨站请求伪造   

 CSRF 的定义 

CSRF(Cross-site request forgery)跨站请求伪造,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比 XSS 更具危险性。


可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

CSRF 的分类 

  • HTML CSRF 攻击

  • JSON HiJacking 攻击

  • Flash CSRF 攻击

CSRF 的攻击过程 

  • 假设用户 A 登录银行的网站进行操作,同时也访问了攻击者预先设置好的网站。

  • 用户 A 点击了攻击者网站的某一个链接,这个链接是 http://www.bank.com/xxx 指向银行,银行服务器根据这个链接携带的参数会进行转账操作。

  • 银行服务器在执行转账操作之前会进行 Session 验证,但是由于用户 A 已经登录了银行网站,攻击者的链接也是 www.bank.com,所以攻击的链接就会携带 session 到服务器。

  • 由于 session id 是正确的,所以银行会判断操作是由本人发起的,执行转账操作。

CSRF 的攻击条件 

  • 登录受信任网站 A,生成可信的 Session

  • 在不登出 A 的情况下,访问危险网站 B,网站 B 伪造网站 A 的请求

CSRF 跨站请求伪造的预防方法   

验证 HTTP Referer 字段 

HTTP header 中包含一个 Referer 字段,这个字段用于指明 http 请求的来源地址。当用户进行正常请求时,此 Referer 字段应该与请求的地址位于同一个域名下(bank.com)。如果是通过 CSRF 攻击伪造的请求则此 Referer 应当包含恶意网址的地址(evil.com)。所以通过对 Referer 来源地址的校验可以识别出伪造的恶意请求。


这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。但这种办法也有其局限性,因其完全依赖浏览器发送正确的 Referer 字段。虽然 http 协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其 Referer 字段的可能。      

在请求地址中添加 token 并验证 

由于 CSRF 攻击的本质在于攻击者欺骗用户去访问自己设置的请求,所以如果在请求敏感数据时,要求用户浏览器提供不是保存在 cookie 中并且攻击者无法伪造的数据作为校验条件,那么攻击者就无法伪造未校验的请求进行 CSRF 攻击。


服务器将其生成并附加在窗体中,其内容是一个伪随机数。当客户端通过表单提交请求时,这个伪随机数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪随机数,而通过 CSRF 传来的欺骗性攻击中,攻击者无从获取页面信息得知这个伪随机数的值,服务端就会因为校验 token 的值为空或者错误,拒绝这个可疑请求。

在 HTTP 头中自定义属性并验证 

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。


通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

智能云网   

智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开放社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK 工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。欢迎各位前来体验。



>>戳我了解更多<<


点击关注,第一时间了解华为云新鲜技术~​

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
教你轻松解决CSRF跨站请求伪造攻击_CSRF_华为云开发者社区_InfoQ写作社区