CSRF 攻击简记

来源:互联网 发布:c语言中match函数 编辑:程序博客网 时间:2024/06/08 14:33

简记

就是简单介绍一下原理,具体怎么实施,要是我很懂,那估计要很久很久之后了。。。。。。。

参考文章

看下面这个例子,假设某网站B,该网站的URL是:

http://www.hello.com

中有一段代码是这样处理的:

if($_GET['id'] && session('id')){    //将该id下的所有用户信息打印出来}

这里你直接去访问该部分代码肯定会报错的,因为肯定要你注册、登录成功后才会在别的地方设置session('id')的,所以网站的搭建者以为这样就可以保证该用户只能访问到自己的个人信息了。

接下来,假设你在登录网站B的情况下,正在访问网站A:

http://www.lucifer.mornig.star.com.cn

这时,里面有一个按钮:送你下地狱,于是你手贱点了一下,却没有想到这个按钮的代码如下:

$url="http://www.hello.com";var end=10000;//不确定该用户在另一家网站的id号,所以多尝试几次for(var index=1;index<end;inde++){    var id=index;    $.get($url,{id:id},function(response){        //这里假设如果错误则返回错误码1001,正确则返回1002与用户的个人信息,这个很号获取的,直接去那个网站体验一下就可以了        if(response.code!=1001){            //这里就能获取用户的个人信息了        }    });

这里为什么要用户来触发呢?(不一定要用户触发,可以设置$(document).ready()来直接触发,但是起始人一定要是你)因为这里是在以当前用户的身份去访问网站B,则网站B自然会按照当前用户的身份去运行他所拥有的权限。

这里你可能会觉得在浏览网站B的时候同时浏览网站A的可能性不大,那么换个角度,如果你在网站B的缓存没有失效,那么在你关闭网站B的情况下,发送上述请求给网站B,是不是也是有效的呢?肯定的啊。所以这就是CSRF攻击。

Laravel防御

前面说过Laravle CSRF防御的内容,但是那时候不知道什么是CSRF攻击,所以特意百度了一下。Laravel采用的方式就是加入验证令牌,也就是表单中的隐藏项,使用该项来判断这个请求是不是自己发出的,如果不是就直接拒绝处理该请求。

原创粉丝点击