切换导航
Poacher's Blog
首页
申请友情链接
关于博客
信息安全梦开始的地方,一个菜鸡#
从开发角度浅谈CSRF攻击及防御
Poacher
2017年12月19日
3382人围观
技术文章
评论
[TOC] ### 1.前言: ------------ 这篇文章在很早之前已经发布出来过了,现在只是以旧数据的形式重新写出来。 ### 2.什么是CSRF? ------------ CSRF可以叫做(跨站请求伪造),咱们可以这样子理解CSRF,攻击者可以利用你的身份你的名义去发送(请求)一段恶意的请求,从而导致可以利用你的账号(名义)去购买商品、发邮件,恶意的去消耗账户资源,导致的一些列恶意行为,CSRF可以简单分为Get型与Post型两种。 #### 2-1.GET型CSRF ------------ 看到这个名字,很明显是发送GET请求导致的。简单来说:GET型的CSRF利用非常简单,通常只要发送一段HTTP请求。如果一个网站某个地方的功能,比如(用户修改自己邮箱)是通过GET进行请求修改的话。如下例: http://www.bugsafe.cn/user.php?id=226&email=226@226.com //这里我们可以看出这个网址是通过get型去对用户的邮箱进行修改。后面&email=226@226.com 是关键的地方。当我们发现没有做任何处理之后,我们将可以去构造一段代码。 只要把它email参数后面的值进行修改。。之后构造一个代码,或者直接一串URL发过去(正常人应该不会这样)。如下例: http://www.bugsafe.cn/user.php?id=226&email=226@qq.com //只要这个id的用户触发了这URL即可成功修改。攻击者可自行修改id,发送该id用户也可以修改。触发后即可成功修改到这个用户的email。 #### 2-2.POST型CSRF ------------ POST型CSRF简单来说,通过POST请求去触发代码造成漏洞。还是一样,举个例子 比如在一个教育视频网站平台。在普通用户的眼中,点击网页->打开试看视频->购买视频 是一个很正常的一个流程。可是在攻击者的眼中可以算正常,但又不正常的,当然不正常的情况下,是在开发者安全意识不足没有进行处理所造成。攻击者在购买处抓到购买时候网站处理购买(扣除)用户余额的地址。 比如:http://www.bugsafe.cn/coures/user/handler/25332/buy.php //通过buy.php处理购买(购买成功)的信息,这里的25532为视频ID。那么攻击者现在构造一个表单(form.html),如: ```html
//自动提交
``` 构造好form表单后,攻击者将form.html上传至一台服务器上,如:http://www.bugsafe.cn/form.html 发送给受害者,只要受害者正在登陆当前教育网站的时候,打开攻击者发送的页面,那么代码则自动触发,自动购买了id为25332的视频。从而导致受害者余额扣除,被攻击者恶意消耗用户余额。如果网站很不严谨,那么只要把id改了,就可以任意的去恶意购买任何视频。消耗受害者的财产,从而导致用户财产安全受影响。 ### 3.CSRF的原理 ------------ 发现漏洞可利用处->构造(搭建)代码->发送给用户(管理员)->触发代码(发送请求)……… 从这个利用的一个流程中,我们可以发现,攻击者仅仅只是做了两处工作.第一处是:发现漏洞利用处,,第二处就是构造利用代码以及发送至用户(管理员)。 ### 4.在开发中如何简单防御CSRF(PHP) ------------ 其实防御CSRF有很多种 如:验证码、验证Referer、以及验证token,对特殊参数进行加密。 但是如果使用验证码去避免CSRF的话,那么这样会验证的影响用户的体验,因为用户不会每个操作都去输入验证码(会很烦)。 Refer的话在特殊情况下也是不靠谱的(服务器端出的问题)。 那么目前只有token是被大多网站去使用的。因为可以避免用户体验的问题发生。同样服务器边问题也发生也不会很多。 那么接下来就开始介绍在PHP开发中如何去简单的生成token,避免CSRF。我们可以通过PHP中函数(rand生成随机数+uniqid生成一个唯一id+time时间戳)最后在讲这几个生成的值用md5加密。接下来来说说如何去生成: 首先先开启`session`会