网站小卫士--csrf机制浅见

最近看了一篇关于csrf机制的文章,觉得很有收获,所以自己总结了一下与大家分享

首先我们要理解一个概念,要从三个方面入手,即是什么?为什么?怎么做?

一、CSRF是什么?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。(出自百度百科)

二、CSRF机制是什么?

CSRF验证机制是为了预防CSRF攻击而创立的,它的具体验证方法是:从cookie中获取一个csrf_token的值,再从请求体中获取一个csrf_token的值,二者进行比较,如果两个值相同则验证通过。如果两个值不同,则验证失败,拒绝请求。

三、为什么要用CSRF机制?

       首先我们通过一个案例来了解CSRF的危害:如下图所示,假设用户通过浏览器访问一个银行网站时,浏览器会将cookie中的用户信息发给银行网站,然后用户在银行网站上进行转账操作,网站就接收到用户的POST请求和请求体中的信息,包括转账人和转账金额等。

        这是正常的请求流程,但有些黑客网站会伪造成银行网站(使用相似的域名或IP地址)当用户误点进黑客网站后,黑客网站就会获取到用户的cookie信息,这样他就可以伪造一个转账POST请求发给真正的银行网站,而银行并不知道这个请求是伪造的,就会造成危害和损失。

                                                            图1:未开启csrf防护机制的情况

        上面是没有使用csrf防护机制的情况,如果使用了csrf机制,我们在cookie中和请求体中都加入了csrf-token变量,在上述案例中,当用户误点进黑客网站后,黑客虽然能得到用户的cookie,但他在伪造请求时就无法获取到请求体中的csrf-token值。

        这里有同学会问了,既然我都获取到用户的cookie了,那我直接从cookie中读取csrf-token的值不就行了吗?这里就用到了浏览器的一个机制了,也是csrf防护机制的核心机制,就是同源策略,同源策略就是浏览器限制了不同源(IP)的网站不能相互操作资源。

        所以,由于同源策略的限制,黑客网站根本无法获取到csrf-token的值,但他不死心啊,他还是伪造了请求发给银行网站,企图瞎猫碰死耗子,但csrf-token的值都是加密过的,蒙对的概率无异于中彩票,结果可想而知,银行网站收到请求后通过比对用户cookie和请求体的csrf-token的值就会发现这是伪造的请求,所以果断拒绝。

        这样通过csrf防护机制,就可以避免悲剧的发生,为人类文明的和谐发展贡献一份绵薄之力,实乃幸也!

        

                                                            图2:开启csrf防护机制

总结:总体来说,csrf防护机制是很有必要的,它可以大大的提高网站的安全性,所以我们在建站时要注意使用这个机制,不积小流,无以成江河,不积跬步,无以至千里。希望今天我的讲解能够让大家有所收获~

最后打一波广告,本人是python全栈工程师,如果各位大佬有什么兼职项目或者工作机会都可以找我哈,感激不尽~

我的QQ:1480456073

猜你喜欢

转载自blog.csdn.net/qq_40652101/article/details/89917379
今日推荐