對(duì)于每一個(gè)客戶的問題,不管大小,都需要跟進(jìn)追蹤到底,以獲得最佳的答案。
一個(gè)問題一個(gè)坑,留了坑,前路必將荊棘叢生;填了坑,前路即是坦途。這是東門人的做事態(tài)度和行事準(zhǔn)則,也幫助我樹立了積極的人生觀。
如果同行也正在經(jīng)受類似問題的困擾,希望同行可以通過這篇文章,在排查過程中能夠獲得一點(diǎn)啟發(fā)。
刷量?客戶反饋異常 IP 發(fā)送大量重復(fù)數(shù)據(jù)
從今年 2 月份起,我陸續(xù)收到客戶反饋:Web JS SDK 短時(shí)間內(nèi)上報(bào)了大量重復(fù)的數(shù)據(jù)到銀聯(lián)商務(wù),從而影響了客戶的分析、決策和制定運(yùn)營計(jì)劃。對(duì)于這種情況我們通常稱之為 “刷量”。什么是刷量?

用戶所反饋的現(xiàn)象和刷量一致,有幾個(gè)異常 IP 短時(shí)間內(nèi)密集發(fā)送 Web 端重復(fù)數(shù)據(jù)入庫。一個(gè) IP 一天發(fā)送的重復(fù)數(shù)據(jù)甚至達(dá)到了幾十萬、上百萬條,這顯然不是一個(gè)正常用戶產(chǎn)生的行為數(shù)據(jù)。
我們查看了刷量時(shí)的用戶行為序列,如下圖,可以看到事件是重復(fù)循環(huán)觸發(fā)的,時(shí)間間隔在幾十毫秒。
針對(duì)此問題的反饋,我們進(jìn)行了快速排查及提供初步行業(yè)資訊。 當(dāng)時(shí)的排查思路:
一,會(huì)不會(huì)是客戶代碼 bug 導(dǎo)致重復(fù)觸發(fā)事件?
通過協(xié)調(diào)運(yùn)維幫忙查詢事件日志,證明這些重復(fù)事件的 trackid(Web JS SDK 對(duì)發(fā)送數(shù)據(jù)生成的隨機(jī)數(shù),每條采集和發(fā)送的數(shù)據(jù)都會(huì)有自己獨(dú)特的 trackid) 是一樣的。從這個(gè)方面看,基本排除了是客戶代碼 bug 導(dǎo)致的,因?yàn)榧词故谴a重復(fù)觸發(fā)的事件,trackid 是不會(huì)重復(fù)的。
二,會(huì)不會(huì)是別人惡意獲取了東門的刷卡變現(xiàn)請(qǐng)求和數(shù)據(jù)體,使用工具或者腳本偽造請(qǐng)求,灌注臟數(shù)據(jù)到銀聯(lián)商務(wù)服務(wù)器?
Web JS SDK 采集的數(shù)據(jù),默認(rèn)使用 image 方式發(fā)送數(shù)據(jù),GET 請(qǐng)求的數(shù)據(jù)接收地址和數(shù)據(jù)體都包含在請(qǐng)求的 URL 中,如圖所示:
只要復(fù)制該 Request URL 直接在瀏覽器地址欄訪問,或者使用腳本訪問,就會(huì)有一條一模一樣的數(shù)據(jù)入庫。這也符合 trackid 重復(fù)的情況,而且可以集中產(chǎn)生大量的請(qǐng)求,實(shí)現(xiàn)灌注臟數(shù)據(jù)。在本地使用腳本模擬,也能夠復(fù)現(xiàn)出來數(shù)據(jù)刷量的情況。
因此,推測(cè)的結(jié)論是:有人從集成了 Web JS SDK 的頁面上,截取了發(fā)送的數(shù)據(jù)請(qǐng)求,并通過腳本灌注臟數(shù)據(jù)進(jìn)入銀聯(lián)商務(wù)。
根據(jù)這一結(jié)論,給客戶的方案是:將 Web JS SDK 的數(shù)據(jù)發(fā)送方式從 image 改成 ajax,這樣請(qǐng)求就會(huì)從 GET 變成 POST,在一定程度上避免將整個(gè)請(qǐng)求暴露在 URL 上;將出現(xiàn)過刷量的 IP 增加到后端的防火墻黑名單中。
問題又現(xiàn)!存疑,再深入排查
但是,似乎并沒有解決問題。在接下來的一個(gè)月,依舊陸續(xù)收到刷量的情況反饋。
我每天值班也都膽戰(zhàn)心驚,只要有客戶反饋刷量的情況,心里都咯噔一下:如果是有人惡意刷量,那么持續(xù)刷的動(dòng)作有點(diǎn)說不通,是否有其他原因?qū)е隆瓎柼?hào)一直懸在那里,始終無法說服自己。
我們內(nèi)部組織 Web JS SDK 開發(fā)人員來集中開會(huì)討論,當(dāng)時(shí)判斷刷量的可能原因:Web JS SDK 的 bug 導(dǎo)致?有人惡意攻擊,灌注的臟數(shù)據(jù)導(dǎo)致?后端服務(wù)中的 bug 導(dǎo)致的重復(fù)讀取數(shù)據(jù)導(dǎo)致?
為了驗(yàn)證我們的推測(cè),申請(qǐng)了一個(gè)客戶被刷量的環(huán)境查看,判斷不是 Web JS SDK 和后端服務(wù)的 bug ,目前的方向也只剩下是有人惡意攻擊了。Web JS SDK 在前端針對(duì)這種情況,沒有什么方法阻止,寄希望于后端可以將這樣的刷量數(shù)據(jù)去重。
由于 Web 端的數(shù)據(jù)入庫后,默認(rèn)使用服務(wù)器時(shí)間,而服務(wù)端的去重邏輯是根據(jù) trackid、time 等一起去重。像這樣的刷量數(shù)據(jù)入庫,雖然 trackid 一致,但是 time 相差只有幾十毫秒,因此無法去重。為了解決這一問題,可以在后端對(duì)于 Web 端數(shù)據(jù)的去重邏輯中將 time 字段去除,這樣就可以對(duì)刷量數(shù)據(jù)進(jìn)行去重了。
不過,這只是一個(gè)臨時(shí)行業(yè)資訊,且該方案只針對(duì)集群版有效,有一定的局限性。另外,這種方案屬于出現(xiàn)了刷量后的被動(dòng)處理。
“用力啊!”
對(duì)于此問題,書記也一直懷疑,每天見我必問:“有進(jìn)展嗎?用力啊!”
由于并沒有找到確定的原因,我在網(wǎng)上查到 image 請(qǐng)求死循環(huán)的資料,如下圖所示:
于是我查看 Web JS SDK 源碼,發(fā)現(xiàn)已經(jīng)對(duì) image 請(qǐng)求的 onerror 做了 null 賦值處理,不會(huì)出現(xiàn)死循環(huán)現(xiàn)象。有點(diǎn)失落,這個(gè)方向也是不對(duì)的。
場(chǎng)景難以復(fù)現(xiàn),多次轉(zhuǎn)機(jī)出現(xiàn)卻屢陷僵局
終于,轉(zhuǎn)折出現(xiàn)了。當(dāng)我與被刷量客戶的技術(shù)做深入溝通時(shí),有了一個(gè)重大發(fā)現(xiàn)。
4 月的某天,客戶拿到注冊(cè)用戶的手機(jī)號(hào),通過技術(shù)人員聯(lián)系到這個(gè)用戶。發(fā)現(xiàn)用戶是正常操作,只是使用了某瀏覽器訪問頁面。當(dāng)時(shí),遠(yuǎn)程客戶電腦進(jìn)行操作,發(fā)現(xiàn)如果關(guān)閉瀏覽器后就會(huì)停止刷數(shù)據(jù),瀏覽器處于開啟狀態(tài)就會(huì)一直刷數(shù)據(jù)。另外,發(fā)現(xiàn)用戶的瀏覽器版本比較老,讓其升級(jí)到最新的瀏覽器后,依然能夠出現(xiàn)刷數(shù)據(jù)的情況。同時(shí),在訪問頁面時(shí)頁面會(huì)有卡頓情況,風(fēng)扇也轉(zhuǎn)的特別厲害。另外,同一時(shí)刻該用戶對(duì)客戶自己頁面的一個(gè)水印圖片訪問量也很大,達(dá)到了 21.4 萬次。但是,對(duì)東門的 sa.gif 訪問量更多,達(dá)到 255.4 萬次。
不過當(dāng)客戶的技術(shù)在自己電腦上模擬的時(shí)候,無法復(fù)現(xiàn)這個(gè)問題。查看當(dāng)前穩(wěn)定版的 M 瀏覽器內(nèi)核為 Chrome 78.0.3904.108。通過這個(gè)發(fā)現(xiàn),我去查看其他客戶的最近刷量數(shù)據(jù),均發(fā)現(xiàn)其 UA 是 Chrome 78.0.3904.108, 指向 M 瀏覽器。通過以上線索推論:刷量問題很可能不是人為惡意攻擊,而是 M 瀏覽器訪問針對(duì) image 數(shù)據(jù)請(qǐng)求可能有無限循環(huán)的 bug 導(dǎo)致的。
按照客戶提供的線索,我反向查看了下:以該內(nèi)核版本為篩選條件,發(fā)現(xiàn)出現(xiàn)刷量的那天,有近 5300 個(gè)用戶使用該內(nèi)核版本訪問了頁面,而出現(xiàn)刷量的情況只有 1~2 個(gè)用戶。從這方面看,刷量似乎不是必現(xiàn)的。本地使用多臺(tái)電腦,測(cè)試 M 瀏覽器均沒有能夠復(fù)現(xiàn),問題似乎又陷入了僵局。
再換一條路,基于 M 瀏覽器的問題判斷,我當(dāng)天我在瀏覽器社區(qū)留言,希望可以從瀏覽器的工作人員那里可以獲得答復(fù)和幫助,如圖所示。
工作人員通過 QQ 聯(lián)系了我,并與我溝通了基本情況。由于他們沒有受理過類似問題,希望我提供復(fù)現(xiàn)的頁面,但是我這邊沒有復(fù)現(xiàn)的頁面。因此,這個(gè)方向的路也堵住了。
感恩信任!與「客戶的用戶」的多次遠(yuǎn)程、面基……
在走投無路時(shí),幾經(jīng)輾轉(zhuǎn),為復(fù)現(xiàn)場(chǎng)景,我再次聯(lián)系客戶的技術(shù)人員,希望能夠聯(lián)系到之前兩位用戶。經(jīng)過客戶的提前溝通,以及一系列的保密協(xié)議簽署后,最終提供兩位用戶的聯(lián)系方式。
起初我?guī)状温?lián)系,都沒有能夠打通電話。而此時(shí),刷量問題愈演愈烈。因?yàn)榫€索只剩下這一條了,我就硬著頭皮繼續(xù)打電話,終于還是撥通了。
在此很感激兩位用戶的信任。第一位用戶幫忙安裝了 TeamViewer,并提供了遠(yuǎn)程。可惜的是這一次沒有復(fù)現(xiàn)刷量的情況。
不能匪⒖ 主站蜘蛛池模板: 无遮挡全彩口工h全彩| 精品午夜福利在线观看| 女人18一级毛片水真多| 亚洲AV无码久久| 好男人在线社区www在线观看视频| 国产a级特黄的片子视频免费| 91蝌蚪在线播放| 散步乳栓项圈尾巴乳环小说| 亚洲欧美日韩国产精品久久| 色台湾色综合网站| 国产精品亚洲小说专区| 一级毛片不卡免费看老司机| 杨幂13分20秒未删减bt| 伊人久久大香线蕉久久婷婷| 被滋润的艳妇疯狂呻吟白洁老七| 国产精品毛片大码女人| 一本色道久久88综合亚洲精品高清| 最近中文字幕无吗高清免费视频| 伊人任线任你躁| 草的爽免费视频| 国产粉嫩白浆在线观看| a毛片全部免费播放| 放进去岳就不挣扎了| 亚洲乱码在线视频| 激情五月婷婷久久| 午夜看一级特黄a大片黑| 高清对白精彩国产国语| 国产综合精品在线| peeasian人体| 成年女人男人免费视频播放| 久艾草国产成人综合在线视频| 激性欧美激情在线aa| 午夜视频高清在线aaa| 香蕉国产人午夜视频在线| 国产精品国产三级国产普通话 | 精品久久久久久中文字幕一区| 国产又黄又大又粗的视频 | 四虎影视永久在线观看| 国产h片在线观看| 国产精品视_精品国产免费| jizzjizz中国护士第一次|