OWASP A3 CSRF
作者:互联网
一.什么是CSRF
CSRF (Cross Site Request Forgery),中文全称跨站点请求伪造。
用户登录网站,有的会需要登录用户的账号和密码,但是用户和网站的访问频繁登录会很麻烦,这个时候就会用到session会话控制。
Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项,存储在cookie中。
二.危害
攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。
、对网站管理员进行攻击
2、修改受害网站上的用户账户和数据
3、账户劫持
4、传播CSRF蠕虫进行大规模攻击
5、利用csrf进行拖库
6、利用其他漏洞进行组合拳攻击
7、针对路由器的csrf攻击
三.代码分析
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
如果URL中包含了操作,例如转账,很明显这是GET
为了安全使用POST方式进行传递参数
但是会使用到$_REQUEST对GET和POST都会获得。
四.如何防御
1、使用验证码
csrf攻击一般都是在受害者不知情的情况下进行发起的,使用验证码可以有效的防止攻击,但是每次请求都要输入验证码会影响用户体验,所以通常只在用户登陆注册,还有一些特定业务场景下使用,比如银行转账。如何使用验证码要根据业务和场景来决定。
2、验证http Referer
http头中的referer字段记录了请求来源地址,比如从 http://www.test.com 点击链接到 http://m.test.com 之后,那么referer就是 http://www.test.com 这个地址。攻击者在对受害者进行攻击的时候,是在攻击者自己的服务器上构建自己的恶意脚本,诱骗受害者点击,所以此时的referer值就是攻击者自己的URL地址。
通过以上可知,csrf攻击都是跨域发起的,所以在服务端针对referer字段验证是否属于安全可靠的域名,可在一定程度上有效防御此类攻击。
但是此类方法并非万无一失,在低版本存在漏洞的浏览器中,黑客可以篡改referer值。另一种情况是csrf结合xss进行攻击,此时就不需要跨域发起,也可以绕过referer验证。
3、使用token
在说token如何防御csrf攻击之前,我们先了解下token的工作原理。
当用户第一次进行登陆的时候,客户端会通过用户名和密码去请求服务器登陆,服务端在收到请求后会验证客户端传来的用户名和密码,如果验证通过,服务器就会签发一个token发给客户端,并且将token放到session中,客户端收到token后存储到本地,以后客户端只要每次请求服务器就要带上token,经过服务器验证通过后才会返回响应数据,否则报错。
csrf攻击成功的前提条件是攻击者可以完全伪造出受害者的所有请求,而且请求中的验证信息都在cookie中,黑客只要使用用户的cookie通过安全验证就可以完成攻击。了解了这些之后,想要防止csrf攻击,就要在http请求中放置黑客不可以伪造的信息,而且该信息不可以存在于cookie中,否则就无效。而token令牌最大的特点就是随机性,不可预测,并且不存在于cookie当中。
对于GET请求,请求参数直接在URL当中,这样token的形式就为 http://xxx.com?csrftoken=tokenvalue ,但是这种方式把请求参数都放在URL中,会导致在referer中泄露,不仅如此,设想另一种场景,一个在内网系统的员工,从内部敏感系统在点击对外部提供服务的网站链接,此时就会把内网敏感信息通过referer泄漏出去。而对于POST请求,token是以隐藏表单存在,。最后注意一点,如果在同域下存在xss漏洞,那么这种使用token的防御将形同虚设。
标签:http,请求,攻击,token,OWASP,A3,referer,csrf,CSRF 来源: https://blog.csdn.net/ID33Dhy/article/details/120322048