【web安全】- CSRF攻击的说明和理解

编	写:袁	亮
时	间: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的代码,比如让他们帮忙发广告、投票、评论等等

发表评论