编 写:袁 亮 时 间:2014-10-14 功 能:CSRF攻击的说明和理解 一、介绍 1、跨站点请求伪造 2、不收集用户的cookie、不伪造cookie、session等验证信息,直接让用户使用有验证过的情况下去做一些请求,从而造成 破坏 二、大致原理 1、诱使用户访问一个有问题的页面A 2、该问题页面A中会发起一个隐藏需求,比如 3、用户在访问该页面的时候,会以验证过权限的身份隐式的请求 4、可能会发起是post或者get请求,post稍麻烦点,get非常简单 4.1 隐藏一个自动提交的post表单,还可以发送到一个隐藏的iframe里,对用户完全透明 4.2 如果是用户自己的站点,ajax发起post请求 4.3 通过flash发起post请求 三、防范 1、重要操作,采用post请求,不要用get请求,get更容易伪造(删除、顶、点赞等) 2、慎用P3P头,因为这个会导致一些浏览器的cookie安全策略失效(img,iframe等请求本是不发送cookie过去的) 3、重要操作添加验证码(对用户不友好) 4、refer检查,易误伤(有些浏览器不发送refer,而且refer易伪造) 5、Anti CSRF Token验证 5.1 token放在表单中,不要放在链接中 5.2 session或者cookie中也存放一个token 5.3 token使用后需要释放,但需要注意多个页面待提交的问题,生成多个token来解决 5.4 如果存在xss漏洞的话,token就基本无效了 四、例子(让用户关注我的育儿微博账号) 1、让用户访问我的一个页面 1.1 可以是一个自己的网站 1.2 也可以随便找个有xss注入攻击的站点,比如在博客里插入一段危险代码 1.3 具体代码可以参考附件中的add_fans.php中的代码(非常简单的html加一行js) 2、用户访问时,会隐藏的提交了一个post请求 2.1 该请求对用户完全透明 2.2 不需要伪造用户的登陆信息,也不需要获取用户的登陆信息,完全绕过登陆验证环节 2.3 用户只要登陆了育儿网账户,就会自动关注我的微博账号 3、其他危险 3.1 通过这种方法,基本上,可以用用户的账号做任何操作(对我们网站现在的情况来说) 3.2 让访问的用户,自动发送一篇带有add_fans.php的博客,形成蠕虫病毒扩散(xss过滤不完成的话) 3.3 在扩散出去的这些用户中,还可以升级下add_fans.php的代码,比如让他们帮忙发广告、投票、评论等等