一、CSRF漏洞原理
1、基本原理
CSRF(Cross-site Request Forgery,跨站请求伪造)是一种针对网站的恶意利用。

CSRF攻击可以利用用户已经登陆或已经授权的状态,伪造合法用户发出请求给受信任的网点,从而实现在未授权的情况下执行一些特权操作。

CSRF与XSS听起来很像,但攻击方式完全不同。XSS攻击是利用受信任的站点攻击客户端用户,而CSRF是伪装成受信任的用户攻击受信任的站点。

2、流程图

CSRF漏洞详解_随机数

 

 

3、条件
●用户成功登陆了网站系统,能执行授权的功能

●目标用户访问了攻击者构造的恶意URL

二、分类
1、GET型
GET型是CSRF攻击最常发生的情形。只要一个http请求就可以了。

本质上,这样的逻辑代码设计本身就不合理。HTTP协议的设计初衷中,GET型请求需要保证“幂等性”,即无论重复发出了多少次GET请求,和仅发出一次请求所产生的效果应该是相同的。这就保证了GET型操作仅能进行类似“查询”、“获取资源”这样的操作。

2、POST型
POST请求是要把参数放在http的请求body里发送给服务器,所以POST类型的CSRF攻击需要用post的方式发送请求。通常的方法就是创建(静态创建或动态创建)一个自动提交的表单。当用户点击或浏览有这样表单的网页就会自动发生CSRF攻击。

三、危害
发送钓鱼邮件、盗用用户账号、网银转账、使用他人账号购买商品等,具体的危害跟存在漏洞的具体业务系统有关。

四、检测与防御
1、检测
手动检测

应首先确定Web应用程序对哪些操作是敏感的,在确认敏感操作后,拦截相应的HTTP请求消息,分析是否存在CSRF漏洞。

半自动检测

常用工具有OWASP的CSRFTester、BurpSuite的Scanner功能。

2、防御
●增加二次验证机制

在敏感操作时候,不再直接通过某个请求执行,而是再次验证用户口令或者再次验证类似验证码等随机数。如:转账时,要求用户二次输入密码。

●校验HTTP Referer字段

校验HTTP Referer字段可以保证相关敏感操作来自授权站点的跳转。在HTTP协议中,定义了一个访问来源的字段,即HTTP_REFERER。站点可以在后端校验Referer是否来自于正常的站内跳转。如果攻击者诱导用户点击跳转链接,则Referer就为攻击者的主机,与网站内部内部跳转情况下的Referer字段不同。

●增加Token参数进行校验

在敏感操作的参数中,增加完全随机的Token参数进行校验。这是目前业内防止CSRF攻击最常用的方法。因为CSRF产生的根本原因是,进行敏感操作时用户每次发送的请求都完全相同。因此,攻击者就可以把这样的请求进行封装包裹,诱导用户点击链接并发出请求。而如果在进行敏感操作时,增加完全随机的Token参数,每次进行敏感操作时发送的请求都不完全相同,攻击者也就没有办法伪造出一个合法的敏感操作请求,也就无法实施CSRF攻击。

学而不思则罔,思而不学则殆