一。什么是CSRF
CSRF(Cross site request forgery),中文名称;跨站请求伪造,也被称为;one clik ttackisession riding,缩写为:CSRF(或者XSRF)。尽管听起来像跨站脚本Xss,但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
二。CSRF攻击原理
网站是通过cookie来实现登录功能的。而cookie只要存在浏览器中,那么浏览器在访问这个cookie的服务器的时候,就会自动的携带cookie信息到服务器上去。那么这时候就存在一个漏洞了,如果你访问了一个别有用心或病毒网站,这个网站可以在网页源代码中插入js代码,使用js代码给其他服务器发送请求(比如ICBC的转账请求)。那么因为在发送请求的时候,浏览器会自动的把cookie发送给对应的服务器,这时候相应的服务器(比如ICBC网站),就不知道这个请求是伪造的,就被欺骗过去了。从而达到在用户不知情的情况下,给某个服务器发送了一个请求(比如转账)。
三。CSRF隐藏套路(举例)
1.通过图片的img src属性,自动加载发起GET请求
<img src="http://恶意网站域名/转账.php?action=转账&amount=100000" width="0" heigh="0">
<p>该标签纯属虚构</p>
例如该标签,伪装成一个图片加载链接,那么系统在加载该页面的时候会直接向该地址发起请求。而且还会自动带上你的cookie,所以你钱包里的钱就没有了。而且宽高都是零。
2.构造超链接,用很吸引人的文字引诱用户点击
<a helf="http://恶意网站域名/转账.php?action=转账&amount=100000">小姐姐在线视频聊天,点击进房间</a>
那么有的把持不住的就点了,然后钱包里的钱就没了。
3.构造隐藏表单,用户访问自动提交,发起POST请求
<form action="http://恶意网站域名/转账.php" method="POST">
<input type="hidden" name="account" value="xiaojiang" />
<input type="hidden" name="amount" value="1000" />
<input type="hidden" name="to" value="xiaowang" />
</form>
<script>document.forms[0].submit();</script>
一旦表单被提交,就会被执行,那么账户里面的钱就会被转走。
四。CSRF与XSS
同样是危害很大的东西,但是就怕他们配合使用,大肆收割。
五。CSRF攻击的防御手段
1.referer字段
Referer 是 HTTP 请求header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含 Referer 。他的意思是引荐,简单来说就是标记你访问当前网页是从哪过来的,可以是搜索引擎或者其他网站。
比如说我从bing里搜索并进入百度网
当我在这里进百度网的时候,请求头中的referer字段就会标记我从哪来的
这个东西本意是为了方便开发者统计访问来源和访问量等等一切数据,但是在这里我们也可以用他。
所以,当某些敏感操作里面我们检查到了referer来源不详或者不太正经,那我们就要小心CSRF攻击了
但是,这个东西能被修改,所以,不完全可信。
2.Cookie Hashing
偶然看到的一种办法
step1:客户端对cookie进行哈希计算,一起发给服务端。
step2:服务端接收到cookie,计算哈希值,与收到的哈希值比较。
step3:如果匹配,则提供服务。
3.token
cookie是基于session向用户发放的东西,存在几个问题,一是session一般储存在内存里,那么大流量用户访问会对服务器造成很大的压力,二是如果浏览器的cookie被调动或者截获,那么极易用于进行CSRF跨站伪造请求攻击。所以现在体长使用token进行身份验证。token就可以理解成洗浴中心给用户发的手牌。
Token的使用流程如下:
- 客户端使用用户名跟密码请求登录;
- 服务端收到请求,去验证用户名与密码;
- 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
- 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据;
- 会话结束,token失效销毁。
4.二次验证
二次验证目前广泛应用于各种敏感操作中例如手机号验证码,滑动验证,点击图片(您仅仅用了1s,超越了99%的人)等等
5.WAF
终极大武器W!A!F!
六。忠告
不要经常夜深人静的时候访问那些''学习网站''。