下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

CSRF攻击是什么?如何去预防?

作者:课课家教育     来源: http://www.kokojia.com点击数:5653发布时间: 2019-01-22 14:09:56

标签: CSRF网络攻击网络安全

  CSRF是一种网络攻击手段,译为跨站请求伪造,也有人会把它与跨站脚本(XSS)混淆,但这其实是两种不同的攻击方式。那它究竟是什么呢?想要去对它做方法该怎么做?

  CSRF也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。CSRF通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行和难以防范,所以被认为比XSS更具危险性。

  CSRF的常见特性

  1.依靠用户标识危害网站

  2.利用网站对用户标识的信任

  3.欺骗用户的浏览器发送HTTP请求给目标站点

  4.另外可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击。

  CSRF攻击原理

      CSRF攻击原理比较简单,如图1所示。其中web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

 CSRF攻击是什么?如何去预防?_CSRF_网络攻击_网络安全_课课家

图1 CSRF攻击原理

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

  2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

  攻击过程

  假设abc用户登录银行的网站进行操作, 同时也访问了攻击者预先设置好的网站.

  abc点击了攻击者网站的某一个链接,这个链接是http://www.bank.com/xxxx指向银行,银行服务器会根据这个链接携带的参数会进行转账操作.

  银行服务器在执行转账操作之前会进行SESSION验证是否登录, 但是由于abc已经登录了银行网站,攻击者的链接也是www.bank.com.所以攻击的链接就会携带session id到银行服务器.

  由于session id是正确的,所以银行会判断操作是由本人发起的,执行转账操作.

  根据上面的说明,我们来模拟一下攻击的过程.

  有www.bank.com跟www.hacker.com.用户abc登录www.bank.com网站之后点击了www.hacker.com的点击抽大奖的诱骗链接

  此链接会向www.bank.com发起一个post请求.由于请求域名为www.bank.com,所以请求会携带www.bank.com的session id.

      www.hacker.com的代码

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<form method="post" action="http://www.bank.com/transfer.php">

    <input type="hidden" name="from" value="abc">

    <input type="hidden" name="money" value="10000">

    <input type="hidden" name="to" value="hacker">

    <input type="button" onclick="submit()" value="点击抽大奖">

</form>

</body>

  可以发现,www.hacker.com的网页中包含了一个向www.bank.com发起的post请求.并且表单都没隐藏了,只有一个诱骗用户点击的按钮.

  CSRF漏洞检测

  检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

  随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等。

  以CSRFTester工具为例,CSRF漏洞检测工具的测试原理如下:使用CSRFTester进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。

  预防

  从上面的例子 可以看到CSRF攻击.黑客不能拿到cookie,也没办法对服务器返回的内容进行解析.唯一能做的就是给服务器发送请求.通过发送请求改变服务器中的数据.上面的例子中攻击者诱导用户点击链接进行转账操作,使得银行数据库中受害者的金额发生了改变。

  了解了CSRF攻击的原理和目标,提出了两种防御手段

  1.referer 验证

  根据HTTP协议,在http请求头中包含一个referer的字段,这个字段记录了该http请求的原地址.通常情况下,执行转账操作的post请求www.bank.com/transfer.php应该是点击www.bank.com网页的按钮来触发的操作,这个时候转账请求的referer应该是www.bank.com.而如果黑客要进行csrf攻击,只能在自己的网站www.hacker.com上伪造请求.伪造请求的referer是www.hacker.com.所以我们通过对比post请求的referer是不是www.bank.com就可以判断请求是否合法.

  这种方式验证比较简单,网站开发者只要在post请求之前检查referer就可以,但是由于referer是由浏览器提供的.虽然http协议有要求不能篡改referer的值.但是一个网站的安全性绝对不能交由其他人员来保证。

  2.token验证

  从上面的样式可以发现,攻击者伪造了转账的表单,那么网站可以在表单中加入了一个随机的token来验证.token随着其他请求数据一起被提交到服务器.服务器通过验证token的值来判断post请求是否合法.由于攻击者没有办法获取到页面信息,所以它没有办法知道token的值.那么伪造的表单中就没有该token值.服务器就可以判断出这个请求是伪造的。

  尽管CSRF被认为是比XSS更具威胁性的攻击,但当我们了解了CSRF的攻击原理就可以进行针对性的防范,预防受到攻击。本文就到此结束了,希望能够帮助到大家,非常感谢您的阅读。学习更多的内容或课程可前往课课家教育。

赞(26)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程