csrf漏洞原理
csrf漏洞即跨站请求伪造,通俗来说即攻击者通过发送第三方网站(乱七八糟的网站)给你,然而这个网站中隐藏了对你已经登陆过的网站的一些请求,也就是含有你的身份认证信息,从而可以假扮你去操作一些事情。
举个例子: 假设微博的关注功能存在csrf漏洞
正常情况下我们微博点赞关注看上去只是一个点击按钮,实际相当于我们发了一个请求 在这里我假设微博关注功能的请求是 https://www.weibo.com?attention=小明 那么这就表示给用户小明点了个关注。。注意:实际http请求中是携带了你cookie(即身份信息)的,总不能还没登陆微博就能点关注吧
这时,如果有人给你发了一个恶意链接 http://www.****.com 这个网站里头有一个很吸引你的图或者什么话题,然而这个话题或图的链接 <a href=“https://www.weibo.com?attention=小黑” taget=“_blank”> 如果你此时微博是登陆状态的,点了这个链接,就好像是你自己在请求关注小黑,这样你就成功关注小黑了。别小瞧这链接!!当然还有隐藏表单自动提交的我这就不举例了,我们换一个角度想想这危害性,大家都知道过年或国庆的时候,会时不时流行头像加国旗这种链接功能,而且传播很广泛,如果有人恶意做了个这样的网站,同时在微博又存在关注功能的csrf漏洞,那就会不知不觉都给这个人点关注了,那这买粉丝的情况是不是就有了。(题外话—之前老是不知不觉突然关注了很多不认识的人会不会是有这漏洞呢)
最后csrf原理附图理解
csrf特点:
现在从上图可以直观的看出其攻击成功的最终原因还是因为借用你的cookie身份去做些事情,而服务器没法区分是不是真的是你本人做的。
1、csrf攻击一般都是从第三方网站发起的而不是被攻击网站,网站还是正常的。
2、攻击者只能借用你的cookie,而不能查看cookie的值,只要是你cookie有的,他都能用
3、触发恶意链接的方式很多、不限于链接,还有图片、表单等等
防御
针对上边csrf的特点,我们可以得知主要解决点在于怎么让攻击者不能冒用你的信息,也就是说服务器怎么去识别他收到的请求是不是你本人发来的。
这里我主要讲token的防御原理,其他简要概括。
1、采用同源策略,同源策略是为了让服务器区分是哪个网址发出来的请求,如果不是从正常网址的请求则拒绝,通常是http请求中的origin 和referer字段—当然这种方式并不能保证一定安全,在这里不细讲了,给个传送门,这部分这讲的请明白的csrf防御–同源策略
2、token的防御方法:想必很多人刚开始了解都有个疑问就是都能用他cookie了,为什么还能把token存在cookie里。。。记住一点!!!!攻击者只能借用你的cookie而不知道cookie的值!!!!
如上图 攻击者是可以直接盗用你的身份信息的,当然cookie不可能直接存你账号密码,这里只是一个简单表示,攻击者可以直接拿来用也可以用你的cookie中的token值,但是传到服务器后,服务器会检查你cookie中的token值和你请求参数的token值是不是一致,如果不一致,那就不是你本人发的 攻击者能够控制的参数比如关注小黑,但是token值攻击者不知道是啥,所以就能成功防御csrf,当然如果该网址还存在xss漏洞的话,这就失效了,xss漏洞是能直接获取到cookie中的内容的。两者一配合,这防御就彻底失效。