記一次接口并發,釀成20萬損失的慘案
1、故障時間:
-
2019年9月25日10:05:00
2、故障現象
用戶提現,財務使用禾源打款,用戶銀行卡到賬成功,但系統把余額又退回到用戶余額賬戶
3、故障影響
涉及256個用戶,提現金額總計208400 元, 已于2019-09-25 11:29:47 將255名用戶,總計208300元余額扣回。
其中一名用戶將余額用掉28元,此用戶的余額賬戶里只有72元,不夠扣回100元。客服已聯系該用戶,該用戶可選擇主動將錢打回名融支付寶賬戶,或將用戶余額賬戶凍結,等該用戶余額夠扣回之后,平臺再扣回
4、故障原因
1、前端打款按鈕沒有做點擊控制,導致財務誤點擊兩次打款,從業務上對此批用戶發起兩次打款流程
2、后端:沒有考慮防重復請求控制,收到兩次打款請求,第一次收到打款請求,結果本是成功的,但因三方打款操作有時間延遲,還沒等到三方回調成功打款的結果,第二次打款請求就過來了,因為此批訂單號重復,直接返回打款失敗,此時系統將錢主動退還到用戶余額賬戶。過了幾分鐘后,三方通知系統第一次打款成功的結果,就造成了錢已經退回用戶余額賬戶,又給用戶銀行卡打了錢的問題。
3、測試雖然測試過重復打款的異常場景,但因為測試環境打款通信時間沒有延遲,沒有出現該現象,就遺漏了該問題。
5、定位和防范
1、定位:f12,重復點擊,查看是否發送2個請求;同時檢查數據庫,相同時間是否有2條數據;b、直接jmeter壓測,檢測;c、借助滲透工具fiddler、burpsuite 驗證重復問題;d、模擬弱網環境,
2、防范:前端:1、按鈕點擊后禁用/或者幾秒內置灰蒙層;后端:冪等校驗,保證數據庫unique唯一性;特別也要注意

浙公網安備 33010602011771號