摘要:但是,不應(yīng)該啊我們是事先有做檢查的。一個(gè)請求成功返回,表示賬戶創(chuàng)建成功。自從年雙十一正式上線,累計(jì)處理了億錯(cuò)誤事件,付費(fèi)客戶有陽光保險(xiǎn)核桃編程荔枝掌門對微脈青團(tuán)社等眾多知名企業(yè)。
摘要: 通過分析用戶的行為,才想得到為什么會(huì)出現(xiàn)這種情況!
前兩天在BearyChat收到這樣的一個(gè)報(bào)警消息:
409 ?Conflict ? 平時(shí)很少遇到這樣的錯(cuò)誤,貌似很嚴(yán)重的樣子,嚇得我趕緊查看到底發(fā)生了什么。
仔細(xì)查看錯(cuò)誤詳情發(fā)現(xiàn)是因?yàn)槭褂猛粋€(gè)郵箱賬號(hào)多次注冊導(dǎo)致后面的請求數(shù)據(jù)庫直接報(bào)錯(cuò)。
但是,不應(yīng)該?。∥覀兪鞘孪扔凶鰴z查的。如果該郵箱已經(jīng)被注冊,會(huì)提醒并且不讓注冊的。難道對方是個(gè)黑客,直接調(diào)用API發(fā)請求?如果是這樣那就更加危險(xiǎn)了,我們已經(jīng)被黑客盯上了!
可是這樣做對黑客也沒什么好處啊,并且IP顯示為國內(nèi)地址,如果真的是黑客好歹用國外的地址吧。想了想,還是仔細(xì)分析到底出了什么問題吧。
再往下一看,發(fā)現(xiàn)自己完全是多想了。如果是黑客的話,下面的用戶行為就把他給完全暴露了!
這些用戶行為記錄默認(rèn)按照倒序排列,我們可以從下往上一條條看用戶的使用軌跡。通過用戶行為可以得知出錯(cuò)前的整個(gè)操作流程:
打開我們網(wǎng)站的首頁
點(diǎn)擊“免費(fèi)試用“進(jìn)入注冊頁面
輸入郵箱
輸入密碼
再次出入密碼
點(diǎn)擊創(chuàng)建團(tuán)隊(duì)
點(diǎn)擊創(chuàng)建團(tuán)隊(duì)
團(tuán)隊(duì)創(chuàng)建成功
報(bào)錯(cuò)
那么問題來了:有沒有什么異常的行為?
答:有!他點(diǎn)擊了創(chuàng)建團(tuán)隊(duì)兩次。
憑著我敏銳的嗅覺意識(shí)到可能是由于用戶快速點(diǎn)擊"創(chuàng)建團(tuán)隊(duì)"按鈕兩次導(dǎo)致。通過時(shí)間記錄發(fā)現(xiàn)第一次點(diǎn)擊是在1.86m,第二次在1.87m。也就是說:用戶在很短的時(shí)間內(nèi)快速點(diǎn)擊了兩次。
剛剛的用戶行為記錄過濾了網(wǎng)絡(luò)請求,接下里我們結(jié)合網(wǎng)絡(luò)請求一起分析:
可以發(fā)現(xiàn)有兩個(gè)/members/email的GET請求,并且都成功返回404,這里代碼的意思是指該郵箱尚未被注冊,可以被使用。一個(gè)/members/create請求成功返回200,表示賬戶創(chuàng)建成功。最后報(bào)錯(cuò)的/members/create請求失敗返回409。
到這里基本確定出錯(cuò)原因就是由于用戶快速點(diǎn)擊創(chuàng)建團(tuán)隊(duì)導(dǎo)致。
有沒有這種可能呢,嘗試復(fù)現(xiàn)一下看看唄!于是,我打開了注冊頁面,輸入郵箱和密碼,然后以超快的手速點(diǎn)擊創(chuàng)建團(tuán)隊(duì)N次。哈哈哈哈,不出所料,被我成功復(fù)現(xiàn)了!
只要能夠成功復(fù)現(xiàn),這個(gè)BUG基本上就算被解決了,接下來就是去分析如何優(yōu)化代碼防止出現(xiàn)這種情況了。有兩個(gè)思路:1. 用戶點(diǎn)擊之后,設(shè)置被點(diǎn)擊的按鈕無效直到點(diǎn)擊請求完全被處理;2. 將驗(yàn)證郵箱是否存在的和創(chuàng)建團(tuán)隊(duì)兩個(gè)異步事件想辦法合并為一個(gè)原子操作。綜合考慮,決定使用第一種方案。因?yàn)閷?shí)現(xiàn)簡單,對現(xiàn)有代碼改動(dòng)不大。
總的來說:當(dāng)在沒有堆棧信息或者報(bào)錯(cuò)信息難以理解的時(shí)候,F(xiàn)undebug記錄的用戶行為真的很有用。五星推薦前端開發(fā)接入到項(xiàng)目中!
關(guān)于FundebugFundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應(yīng)用實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了10億+錯(cuò)誤事件,付費(fèi)客戶有陽光保險(xiǎn)、核桃編程、荔枝FM、掌門1對1、微脈、青團(tuán)社等眾多知名企業(yè)。歡迎大家免費(fèi)試用!
版權(quán)聲明轉(zhuǎn)載時(shí)請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/09/06/fundebug-user-behavior-help-debug/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91796.html
摘要:同步一次執(zhí)行一件事,同步引擎一次只執(zhí)行一行,是同步的。調(diào)用函數(shù)將其推入堆棧并從函數(shù)返回將其彈出堆棧。執(zhí)行上下文當(dāng)函數(shù)放入到調(diào)用堆棧時(shí)由創(chuàng)建的環(huán)境。執(zhí)行結(jié)果它會(huì)立即被推到回調(diào)隊(duì)列,但它仍然會(huì)等待調(diào)用堆棧為空才會(huì)執(zhí)行。 為了保證可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 一些名詞 JS引擎 — 一個(gè)讀取代碼并運(yùn)行的引擎,沒有單一的J...
摘要:總的來說,可以稱為文本主導(dǎo)的正則引擎,可以稱為表達(dá)式主導(dǎo)的正則引擎。首先,正則表達(dá)式在計(jì)算機(jī)看來只是一串符號(hào),正則引擎首先肯定要解析它。精通正則表達(dá)式書中說引擎不支持非貪婪模式,很明顯不是引擎。正則表達(dá)式中可以商榷的部分就叫做備選狀態(tài)。 本文是『horseshoe·Regex專題』系列文章之一,后續(xù)會(huì)有更多專題推出GitHub地址:https://github.com/veedrin/...
摘要:示例使用顯示隱藏組件這個(gè)示例是一個(gè)組件,它顯示一些文本,并在末尾顯示一個(gè)鏈接,當(dāng)單擊鏈接時(shí),它展開剩下的文本。還有一個(gè)處理提交的函數(shù),其中,來阻止頁面刷新并打印出表單值。它使用傳遞一個(gè)對象,為了確?,F(xiàn)有的狀態(tài)不被覆蓋,這里使用了展開運(yùn)算。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 到 React 16.8 目前為止,...
摘要:失業(yè)的兩周真的也是爽啊,每天打打球,去面試面試,當(dāng)作逛街。為什么走我一定是瘋了,我才辭職的吧。我一直覺得工作是自己喜歡,不是因?yàn)樯钏取eX,只是說能力的體現(xiàn)。但是不忘初心,善始善終,生活才剛剛開始啊。。。? 失業(yè)的第二周,一邊玩的很開心一邊又擔(dān)心工作,一邊投簡歷一邊面試,一邊嫌棄廠太小不想去,一邊大廠又沒有消息,糾結(jié)糾結(jié)。 ? 從大一暑假邊上課邊工作到后來全職工作,其中寒暑假無休,畢業(yè)跟實(shí)...
摘要:業(yè)務(wù)開發(fā)中的調(diào)試方法總結(jié)這段時(shí)間,接觸了單元測試,同時(shí)業(yè)務(wù)中遇到了一些需要排錯(cuò)調(diào)試的情況,就把自己的經(jīng)驗(yàn)做個(gè)小結(jié)。但是如果你的業(yè)務(wù)經(jīng)常變化,但是變化的部分并不會(huì)影響單元測試,那這種情況下的單元測試性價(jià)比就很高。 業(yè)務(wù)開發(fā)中的調(diào)試方法總結(jié) 這段時(shí)間,接觸了單元測試,同時(shí)業(yè)務(wù)中遇到了一些需要排錯(cuò)調(diào)試的情況,就把自己的經(jīng)驗(yàn)做個(gè)小結(jié)。 3種調(diào)試方法 狼叔說,常見的三種調(diào)試的境界 初級: 打l...
閱讀 4038·2021-11-22 13:53
閱讀 3632·2021-11-19 11:29
閱讀 1286·2021-09-08 09:35
閱讀 3180·2020-12-03 17:26
閱讀 522·2019-08-29 16:06
閱讀 2119·2019-08-26 13:50
閱讀 1192·2019-08-23 18:32
閱讀 2164·2019-08-23 18:12