首页 > 代码库 > csrf攻击

csrf攻击

知识点:http请求是无状态的,也就是说每次http请求都是独立的无关之前的操作的,但是每次http请求都会将本域下的所有cookie作为http请求头的一部分发给服务器,所以服务器就根据请求中的cookie存放的sessionid去session对象中找到用户记录。

 

理解了以上,csrf攻击就是恶意的复制用户的信息,并做一系列危害用户利益的操作,这就是csrf的机制。

 

csrf攻击的主要目的是让用户在不知情的情况下攻击自己衣登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被控制的站点,我们叫他钓鱼网站。比如这个网站的美女图片特别吸引你,然后你手贱的点了一下,此时就可以触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖。由于当前你的浏览器状态已经是登录状态,所以session登录cookie信息都会跟正常的请求一样,纯天然的利用当前的登录状态,让用户不知情的情况下,帮你发帖或者干别的事情更严重的是如果有关钱相关,可以购买或者退款之类的操作。是不是很惨!

 

防御!

1、通过referer、token或者验证码来检测用户提交

2、尽量不要在页面的链接中暴露用户隐私信息

3、对于用户修改删除等操作最好使用post操作

4、避免全站通用的cookie,严格设置cookie的域

简单的说:

1、http头中有一个叫referer的字段,它记录了该http请求的来源地址,在通常情况下,访问一个安全受限页面的请求来自同一个网站,比如需要访问一个a域名下面的某个链接的,用户必须先登录a域名,然后通过点击页面中的按钮进行转账事件,这时,该转账请求的refer值就会是转账按钮所在的页面的url,通常以a域名开头的地址,而如果黑客要对网站实施csrf攻击,他只能在他的网站构造请求,当用户通过黑客的网站发送请求到a域名喜爱,该请求的referer是指向黑客自己的网站,因此要防御csrf攻击,a网站只需要对每一个转账验证其referer值,如果是a开头的域名则说明是自己的请求,是合法的,否则拒绝该请求。

 

2、另一种方法就是在请求中放入黑客不能伪造的信息,并且不存在与session中,可以是http请求中以参数的形式加入一个随机产生的token,并且在服务器端简历一个拦截器来验证这个token,如果请求中没有token或者token值不正确,则认为可能是csrf攻击而拒绝该请求

 

差不多就这些来我了解的,都下班去欢度周末来,真的,好好看书吧,总是要还的。

 

csrf攻击