美文网首页程序员
二探csrf攻击

二探csrf攻击

作者: snow_in | 来源:发表于2018-09-15 21:20 被阅读0次

介绍

csrf(cross site request forgery)跨站请求伪造,也被称为 one-click attack 或者 session riding。它和xss一样,都是一种网络攻击方式。从它的名字我们可以看出,这是一种以受害人的名义发送请求的一种攻击。

原理

攻击者究竟是如何利用csrf发动攻击让用户中招于无形的呢。大致过程是这样的:

  1. 用户登陆受信任网站A
  2. 在没有退出的情况下又去浏览其他网站
  3. 不幸的是该网站恰好带有攻击性代码,它要求去访问网站A
    这样在用户不知情的情况下一个请求就发出去了。
    csrf.jpg
    (这是之前看资料的时候看到的一张图片,觉得挺形象的,就保留下来了,具体哪个网站忘记了。。。)

csrf攻击分为get型和post型,下面我们来一一说下

get型攻击

就是通过get请求发起的攻击。示例如下:

csrf1.png
当我们点击垃圾箱的时候,实际上是发起了一个get请求(http://wp-admin/content.php?action=trash&wpnonce=48a05ef771)把当前这一条数据给删除掉。
当我们正在浏览这个网站的时候,有人给发过来了一条短信,里面包含一条链接,出于好奇点了进去,里面包含一条超链接(<a href="http://wp-admin/content.php?action=trash&wpnonce=48a05ef771">海量好物任你选,快来看看吧~~</a>), 购物欲驱使我们点了进去,于是刚才网站上的那个条目就被删除了。。。。

post型攻击

就是通过post请求发起的攻击,我们如何构造一个post请求呢,比如说还是刚才那个网站,我要新增一个条目:

<!DOCTYPE html>
<html>
<body>
   <form action="http://wp-admin/content.php" id="form" method="POST"> // action就是受攻击网站要提交的接口地址
      <input type="text" name="name" value="aaaaa"> // name就是传的参数
   </form>
    <script type="text/javascript">
        document.getElementById('form').submit();
    </script>
</body>
</html>

这样执行这个页面之后,就会在网页新增一个条目

csrf的攻击对象

csrf攻击能让受害人产生实质性损害的,就是那些要直接改变数据的请求,比如银行转账操作啦,购物网站购买东西啦等等之类的操作,像是获取信息的请求比如查看账户有多少钱是不会产生啥影响的(当然,查看完账户余额起了别的心思就不好说了,哈哈哈)。所以主要要对这些改变数据的请求做验证。

csrf的防御

目前防御csrf攻击的策略主要有三种:验证 HTTP Referer 字段;添加校验token;在http头中自定义属性并验证

1. 验证http referer字段

http请求头中,有一个referer字段,纪录了该请求的来源地址。比如打开百度的首页,随便点开一个请求


referer.png

所以正常的话用户发送的请求referer应该是受信任网站的地址,hacker发动csrf攻击只能是在他自己的网站构造请求,如果用户通过hacker的网站发送了请求,referer值应该是hacker的网站地址,所以后台只要检查referer的值就可以,如果不合法的话就拒绝该请求。但是用户可以设置浏览器在发送请求的时候不携带referer字段,万一用户设置了,校验的时候没有referer字段请求通不过就有问题了

2. 添加校验token

csrf之所以可以成功,是因为请求完全可以伪造,用户的验证信息存储于cookie中,所以hacker只要能拿到请求地址跟请求参数就可以了。现在,我们在请求参数中加入一个token字段,token的值是服务端随机生成的,每次请求都去校验token的值,只要token值不正确或者没有token参数,就认为是不安全的请求。因为token的值是服务端随机生成的,每次都不一样,所以就安全了许多。但是每个请求都要加上这个参数,也是很繁琐的。

3. 在http头中自定义属性并验证

这种跟上一种方法差不多,就是不是在参数里面加了,而是加在http请求头上,只需要设置一次,比上一种方法便捷许多。

相关文章

网友评论

    本文标题:二探csrf攻击

    本文链接:https://www.haomeiwen.com/subject/hlftnftx.html