第3章
燈下同謀1
流鏈路占比上升。那意味著錯(cuò)誤可能在更靠近回傳的節(jié)點(diǎn)?!?br>小高抬眼:“你的意思是結(jié)果回傳的請(qǐng)求也在出問(wèn)題?”
“不?!绷种妮p輕搖頭,“我想的是:回流鏈路改變后,前端構(gòu)建支付請(qǐng)求時(shí)使用了錯(cuò)誤的上下文數(shù)據(jù)。上下文本應(yīng)來(lái)自一次新的會(huì)話,但因?yàn)樘D(zhuǎn)回流沒(méi)有正確刷新,會(huì)話上下文仍是舊的。于是校驗(yàn)失敗,且由于更多回流發(fā)生,失敗范圍就會(huì)擴(kuò)張。”
她說(shuō)著把關(guān)鍵字段列出來(lái):session_id、nonce、client_timestamp。她盯住client_timestamp,覺(jué)得不對(duì)。按理說(shuō)時(shí)間戳應(yīng)該由客戶端生成并參與簽名,除非客戶端在某些情況下復(fù)用了舊的nonce。那會(huì)導(dǎo)致一致性校驗(yàn)失敗,且很難從接口兼容層面解釋。
“我需要看前端埋點(diǎn)?!彼D(zhuǎn)頭,“把這次事故中用戶的關(guān)鍵字段抓出來(lái)。”
技術(shù)組的人面面相覷。看起來(lái)大家都在等她提供“產(chǎn)品側(cè)的解釋”,但真正要的是“數(shù)據(jù)證據(jù)”。林知夏從來(lái)不喜歡空談。她迅速申請(qǐng)了查詢權(quán)限,拉取了事故時(shí)間窗口內(nèi)的樣本數(shù)據(jù)。屏幕上出現(xiàn)一張表格,行數(shù)很少,卻足夠讓人判斷:回流用戶的nonce重復(fù)率遠(yuǎn)高于常態(tài)。
“這就是了?!绷种暮袅艘豢跉?,像把胸口的緊繃往外放,“nonce重復(fù)導(dǎo)致校驗(yàn)失敗。你們上線時(shí)有沒(méi)有改動(dòng)nonce生成邏輯,或者有沒(méi)有改過(guò)埋點(diǎn)上報(bào)時(shí)機(jī)?nonce通常和會(huì)話啟動(dòng)時(shí)機(jī)掛鉤。”
“沒(méi)有動(dòng)這塊?!庇腥嘶卮穑拔覀儼姹靖轮饕侵Ц俄?yè)面的UI和一個(gè)促銷(xiāo)券的邏輯?!?br>林知夏盯著那條“促銷(xiāo)券邏輯”。UI改動(dòng)和促銷(xiāo)券邏輯都可能影響到參數(shù)構(gòu)建與會(huì)話上下文使用方式。她把可能的因果線收攏到一次促銷(xiāo)券請(qǐng)求的觸發(fā):如果券邏輯在支付前就觸發(fā),并且券觸發(fā)依賴某段緩存或會(huì)話狀態(tài),那么可能在回流時(shí)產(chǎn)生時(shí)機(jī)錯(cuò)位,導(dǎo)致nonce被錯(cuò)誤復(fù)用。
“促銷(xiāo)券模塊的代碼誰(shuí)負(fù)責(zé)?”她問(wèn)。
“周祁。”技術(shù)負(fù)責(zé)人回答。他說(shuō)到名字的時(shí)候沒(méi)有太多情緒,卻讓整個(gè)屋子像被輕輕推了一下方向。林知夏記得周祁,
“不?!绷种妮p輕搖頭,“我想的是:回流鏈路改變后,前端構(gòu)建支付請(qǐng)求時(shí)使用了錯(cuò)誤的上下文數(shù)據(jù)。上下文本應(yīng)來(lái)自一次新的會(huì)話,但因?yàn)樘D(zhuǎn)回流沒(méi)有正確刷新,會(huì)話上下文仍是舊的。于是校驗(yàn)失敗,且由于更多回流發(fā)生,失敗范圍就會(huì)擴(kuò)張。”
她說(shuō)著把關(guān)鍵字段列出來(lái):session_id、nonce、client_timestamp。她盯住client_timestamp,覺(jué)得不對(duì)。按理說(shuō)時(shí)間戳應(yīng)該由客戶端生成并參與簽名,除非客戶端在某些情況下復(fù)用了舊的nonce。那會(huì)導(dǎo)致一致性校驗(yàn)失敗,且很難從接口兼容層面解釋。
“我需要看前端埋點(diǎn)?!彼D(zhuǎn)頭,“把這次事故中用戶的關(guān)鍵字段抓出來(lái)。”
技術(shù)組的人面面相覷。看起來(lái)大家都在等她提供“產(chǎn)品側(cè)的解釋”,但真正要的是“數(shù)據(jù)證據(jù)”。林知夏從來(lái)不喜歡空談。她迅速申請(qǐng)了查詢權(quán)限,拉取了事故時(shí)間窗口內(nèi)的樣本數(shù)據(jù)。屏幕上出現(xiàn)一張表格,行數(shù)很少,卻足夠讓人判斷:回流用戶的nonce重復(fù)率遠(yuǎn)高于常態(tài)。
“這就是了?!绷种暮袅艘豢跉?,像把胸口的緊繃往外放,“nonce重復(fù)導(dǎo)致校驗(yàn)失敗。你們上線時(shí)有沒(méi)有改動(dòng)nonce生成邏輯,或者有沒(méi)有改過(guò)埋點(diǎn)上報(bào)時(shí)機(jī)?nonce通常和會(huì)話啟動(dòng)時(shí)機(jī)掛鉤。”
“沒(méi)有動(dòng)這塊?!庇腥嘶卮穑拔覀儼姹靖轮饕侵Ц俄?yè)面的UI和一個(gè)促銷(xiāo)券的邏輯?!?br>林知夏盯著那條“促銷(xiāo)券邏輯”。UI改動(dòng)和促銷(xiāo)券邏輯都可能影響到參數(shù)構(gòu)建與會(huì)話上下文使用方式。她把可能的因果線收攏到一次促銷(xiāo)券請(qǐng)求的觸發(fā):如果券邏輯在支付前就觸發(fā),并且券觸發(fā)依賴某段緩存或會(huì)話狀態(tài),那么可能在回流時(shí)產(chǎn)生時(shí)機(jī)錯(cuò)位,導(dǎo)致nonce被錯(cuò)誤復(fù)用。
“促銷(xiāo)券模塊的代碼誰(shuí)負(fù)責(zé)?”她問(wèn)。
“周祁。”技術(shù)負(fù)責(zé)人回答。他說(shuō)到名字的時(shí)候沒(méi)有太多情緒,卻讓整個(gè)屋子像被輕輕推了一下方向。林知夏記得周祁,