csrf攻击和token

  • 参考来源

    https://zhuanlan.zhihu.com/p/22521378

  • csrf攻击

    A网站是一个正常的直播类网站可以送礼物,送礼物的接口是 https://xxxx.com/gift/send?target=someone&giftId=ab231 (get和post都行,这里只是一个示例),在用户已登录状态下调用这个接口就可以给someone这个用户送ab231这个礼物;

    B网站可能通过非法链接、网页伪装、图片url外链等操作让用户访问这个接口(可能顺便伪装一下让用户使用用户名和密码登录,也可能很不幸用户在A网站就是登录状态),如果B网站的后端没有采取任何操作,那么用户神不知鬼不觉的就给someone送了礼物;

    但是用户可能会在送礼物历史中发现问题,假设删除礼物的接口是 https://xxxx.com/gift/deleteRecord ,接口类型为POST,请求参数为 { giftId:“ab231”},此时可以再用一个伪装网页进行自动提交、并跳转回首页(而且这个网页是什么也不显示的)

    哈哈,给你开了个玩笑,莫生气~
      <script>
          document.getElementById('form').submit();
          location.href = "http://xxxx.com";
      </script>
    

    如果删除礼物的接口也不采取任何措施的话,那么就再次攻击成功,用户根本不知道礼物已经送出去了

  • 使用token防止csrf攻击

    1. 服务端第一次收到请求时(例如登录),会生成一个随机数,在渲染请求页面时把随机数埋入页面(一般埋入 form 表单内)

       <input type="hidden" name="_csrf_token" value="xxxx">
      
    2. 服务端通过setSession把这个随机数传回浏览器

    3. 用户再次发送请求时,会带上这个随机数(_csrf_token参数)

    4. 服务端会进行校验,如果_csrf_token参数不存在或者检验不通过,则请求不合法

  • 注意事项

    1. token应该放在session中

      如果放在cookie中会出现当浏览器开了很多页面,而一些页面重新种入新的token时,用户会发现一些页面过了几分钟就无法访问了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值