原理解析
CSRF作为 top10的漏洞,对web应用存在巨大的危害性,攻击者通过跨站伪造请求盗用正常用户的身份执行具有危害性的操作,而这些行为对服务器来说是完全合法的行为(在没有风控系统的情况下)。例如攻击手法中所述
利用方式
正常用户通过在线银行进行转账汇款等操作时服务器需要验证用户身份,当身份验证通过时,服务器执行用户的操作。当前web应用中验证用户身份主要通过cookie,session等手段。当用户登录银行的web应用后,浏览器将记录用户和银行的session以及cookie等身份认证信息,此时用户再访问攻击者的网站时,就可能出现CSRF攻击,比如攻击者的网站存在如下代码<img src=”http://www.银行.com/mony?user=转账操作数据”>
,用户访问时就会向银行发送src中的请求,而此时用户和银行的会话并没有过期,就导致在用户完全不知情的情况下钱被转走。
防御方式
防御CSRF可以从以下三个方面出发:
- 验证HTTP Referer字段 HTTP
referer可以记录请求来源,web应用通过检测该字段可以判断收到的请求是否是从自己的网站发送的。当用户在黑客网站收到csrf攻击后,web应用验证referer值就可以判断csrf攻击。但是referer的值依然存在被篡改的可能。 - 只使用JSON API
使用JavaScript发起的AJAX请求是限制跨域的,并不能通过简单的表单来发送json,因此可以很大程度上地域CSRF。 - 添加token验证
通过向HTTP请求中添加一个随机产生的token,并在服务器进行验证可以抵御CSRF攻击,因为黑客并不能伪造token,但是依然存在token被窃取的可能。 - 使用多重验证
这种方法是当前大部分web应用商采取的方法,用户在web端进行一些危险性较高的行为(诸如付款,转账等)时,都需要同时使用手机端进行扫码确认,通过web端和移动端的双重确认,极大的抵御了csrf的发生。
我的个人博客,欢迎大家访问 ~~~