文档章节

我是这样搞懂一个神奇的BUG

Fundebug
 Fundebug
发布于 2017/09/06 15:27
字数 1004
阅读 11
收藏 0

摘要: 通过分析用户的行为,才想得到为什么会出现这种情况!

前两天在BearyChat收到这样的一个报警消息:

409Conflict ? 平时很少遇到这样的错误,貌似很严重的样子,吓得我赶紧查看到底发生了什么。

仔细查看错误详情发现是因为使用同一个邮箱账号多次注册导致后面的请求数据库直接报错。

但是,不应该啊!我们是事先有做检查的。如果该邮箱已经被注册,会提醒并且不让注册的。难道对方是个黑客,直接调用API发请求?如果是这样那就更加危险了,我们已经被黑客盯上了!

可是这样做对黑客也没什么好处啊,并且IP显示为国内地址,如果真的是黑客好歹用国外的地址吧。想了想,还是仔细分析到底出了什么问题吧。

再往下一看,发现自己完全是多想了。如果是黑客的话,下面的用户行为就把他给完全暴露了!

这些用户行为记录默认按照倒序排列,我们可以从下往上一条条看用户的使用轨迹。通过用户行为可以得知出错前的整个操作流程:

  • 打开我们网站的首页
  • 点击“免费试用“进入注册页面
  • 输入邮箱
  • 输入密码
  • 再次出入密码
  • 点击创建团队
  • 点击创建团队
  • 团队创建成功
  • 报错

那么问题来了:有没有什么异常的行为? 答:有!他点击了创建团队两次。

凭着我敏锐的嗅觉意识到可能是由于用户快速点击"创建团队"按钮两次导致。通过时间记录发现第一次点击是在1.86m,第二次在1.87m。也就是说:用户在很短的时间内快速点击了两次。

刚刚的用户行为记录过滤了网络请求,接下里我们结合网络请求一起分析:

可以发现有两个/members/email的GET请求,并且都成功返回404,这里代码的意思是指该邮箱尚未被注册,可以被使用。一个/members/create请求成功返回200,表示账户创建成功。最后报错的/members/create请求失败返回409。

到这里基本确定出错原因就是由于用户快速点击创建团队导致。 有没有这种可能呢,尝试复现一下看看呗!于是,我打开了注册页面,输入邮箱和密码,然后以超快的手速点击创建团队N次。哈哈哈哈,不出所料,被我成功复现了!

只要能够成功复现,这个BUG基本上就算被解决了,接下来就是去分析如何优化代码防止出现这种情况了。有两个思路:1. 用户点击之后,设置被点击的按钮无效直到点击请求完全被处理;2. 将验证邮箱是否存在的和创建团队两个异步事件想办法合并为一个原子操作。综合考虑,决定使用第一种方案。因为实现简单,对现有代码改动不大。

总的来说:当在没有堆栈信息或者报错信息难以理解的时候,Fundebug记录的用户行为真的很有用。五星推荐前端开发接入到项目中!

版权声明:

转载时请注明作者Fundebug以及本文地址:

https://blog.fundebug.com/2017/09/06/fundebug-user-behavior-help-debug/

© 著作权归作者所有

共有 人打赏支持
Fundebug
粉丝 8
博文 154
码字总数 226660
作品 0
厦门
私信 提问
使用jq的toggle函数实现全选功能遇到的问题

今天做网站后台管理的时候,要实现一个单选全选的功能,很简单的功能,不过,遇到了一个很诡异的问题,写出来跟大家分享下。 功能就不赘述了,大家都懂,最初打算使用jq的toggle函数来绑定两...

保护单身狗协会理事
2013/11/18
0
0
程序员鼓励师?这个是神马?真是duang了一下!

长相甜美、微笑常在、了解手机、懂科技,就坐在那儿喊个加油就可以拿20K到30K!这真的是醉了!魅族在招聘“程序员鼓励师”,你造吗? 今年的互联网界比较逗,各招聘网站相继出现程序员鼓励师,...

钟超cody
2015/04/02
3K
10
我的bug人生

上一周工作中遇到了一些不开心的事情,被同事背后捅了刀子,有点郁郁寡欢,我一直认为,我们搞技术的人,心境纯洁,有bug我们改一改,有加班我们就干一干,只要能让自己的程序运行起来,比什...

monster_nian
2016/01/25
34
0
T9 上线 9coin 交易所 当日涨幅高达 50%

投 资 圈 总是如此的热闹非凡 你还没搞懂什么是互联网 移动互联网起来了 你还没搞懂什么是移动互联网 人工智能起来了 你还没搞懂什么是人工智能 区块链起来了 2018年数字投资进入熊市,市场进...

daxizi
2018/08/09
0
0
继各种佛系之后,终于出现了佛系程序员

  最近网上疯转的都是   第一批90后已经出家了、入定了、看破红尘了   对佛系青年的看法也褒贬不一   但更多的还是觉得哈哈哈真有意思   这其实只是当下年轻人的一种自嘲   我们...

奋斗在IT
2017/12/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部