618京東到家APP-門詳頁反爬實戰 | 京東雲技術團隊

發表於2023-09-22

一、背景與系統安全需求分析

1. 系統的重要性

上圖所示是介面所屬位置、對電商平臺或線上商店而言,分類查商品都是很重要的,透過為使用者提供清晰的商品分類,幫助他們快速找到所需產品,節省瀏覽時間,提升購物效率,是購物結算產生GMV的核心環節。那麼電商平臺為什麼都很看重商品資訊的爬取?

a. 資料收集和分析:這些資料對於市場研究、競爭分析、價格比較等方面非常有價值。可獲得有關產品趨勢、消費者偏好、價格波動等資訊,有助於企業進行決策和制定營銷策略。

b. 價格監控和動態調整:可以實時跟蹤和監控競爭對手的價格變化。企業可以根據市場情況及時調整自己的產品定價,保持競爭力,並更好地滿足消費者需求等。

2. 風險評估

a. 系統安全、以及觸發各種報警

b. 資料安全

c. 頻寬和伺服器資源消耗

d. 不良競爭等;

3. 618期間的爬蟲問題

由於這個介面還比較特殊,我們在3個版本前剛遷移color閘道器,其他低版本使用的是另一個物理閘道器我們暫且稱: B閘道器,另外在B閘道器還由於一些歷史原因區分了Get 和 Post 兩個介面對客戶端提供。所以一共是3個介面。

客戶端有多平臺:h5, 微信小程式、支付寶小程式、android、ios、rn.

a. 爬蟲曲線明顯從監控上看得出規律,另外效能也隨之報警,並且不太確定是登陸爬蟲還是不登陸爬蟲。

b. 後臺服務監控這3個介面過來的流量監控未區分color閘道器和B閘道器,還需要確定爬蟲來源是從哪兒來

c. 各個平臺的客戶端都有爬蟲,android的效能受影響更大,

d. 另外各端遷移color閘道器的情況不太一致,有個別端有問題降級為B閘道器,另外h5和rn不存在版本的問題,一切全切,而ios、android、小程式還存在老版本調老介面的問題。

二、反爬策略選擇

1. 可選擇的反爬策略

B閘道器可使用的策略

a. 登入態-未登入攔截

b. 反人類策略-頻控使用者pin維度頻控

c. 安全人員進行行為分析,將pin到加黑名單

color閘道器可使用的神盾策略

a. 登入態-未登入攔截

b. 神盾防刷能力之一---加固

c. 神盾防刷能力之一---反爬

d. 神盾防刷能力之一---小號

e. 神盾防刷能力之一---風控

2. 如何選擇?結合系統現狀--在使用者體驗和反爬蟲之間平衡

a. 由於歷史沒開登陸態,優先選擇不開登陸態的

b. 看下版本佔比,先處置老版本看看效果也就是老的B平臺

c. 如果發現ab執行完效果不太明顯,考慮老版本開啟登陸態比如開登陸態

d. 如果開完登陸態還不OK,考慮下是爬蟲有登陸態在爬,做下頻控

e. 如果還不OK,考慮是爬蟲爬的高版本,需要在color上發力了

f. 聯絡成熟的color團隊溝通看下爬蟲問題,然後他們給出建議和可以做的操作,評估申請執行

g. 最終不行再考慮下登陸態

h. 反爬蟲過程中雙方是一直在對抗,比如某些策略生效,對方想辦法破解,持續加嚴,持續想辦法破

三、實施反爬措施

備註:下面所涉及的監控有幾類

a. 伺服器後臺的監控分客戶端:全來源(包含B閘道器的GET和POST和Color的)監控

b. B閘道器自己的監控key分客戶端:只包含B閘道器(GET和POST的介面各有單獨的)監控

c. Color閘道器的監控分客戶端:只包含Color閘道器的

1. 找B閘道器的安全人員分析,識別到一些黑名單,加完之後效果不太明顯,建議我們看下版本佔比開啟登陸態

2. 找埋點分析人員取數拿到資料isColor=1是color閘道器, 0是B閘道器;isLogin=1是登陸,0是未登陸

3. 單獨看B閘道器和color閘道器的監控,發現都有爬蟲,跟產品確認後開啟老平臺的登陸態校驗-先用andorid端嘗試看效果,某些競品這類介面其實也開著登陸態攔截。

服務端針對andorid端監控

4. 開啟後效果顯著,就也開啟了B閘道器介面各端登陸態,發現H5、小程式沒啥效果,懷疑是有登陸態的爬蟲,安全人員繼續分析

服務端針對H5端的監控

5. 懷疑是登陸態的爬蟲,安全人員想辦法獲取風險pin,方案是透過埋點透過行為分析取數,限制以下條件獲取到35個pin,通曬後加黑名單

提數策略一

a.介面埋點時間範圍:2023.05.30 2:00 - 2023.05.30 4:00

b.platcode = H5

c.單pin 訪問 無 經緯度引數

d.單pin 訪問 不同門店id 數量大於5個

提數策略二

a.介面埋點時間範圍:2023.05.30 2:00 - 2023.05.30 4:00

b.platcode = H5

c.單pin 訪問 >100 次

d.單pin 訪問 中 不同門店id 數量大於10個

B閘道器的POST介面的H5端的監控

6. 同時意識到為什麼B閘道器的GET介面還有量?是正常使用者,還是全是爬蟲?找各端確認介面呼叫情況。確定各端都沒有在調老的GET介面,再嚴謹一點想確定下到底是哪個平臺過來的,找B閘道器人看了下日誌是H5端來的,再次確認H5也不存在版本這個概念,那麼就認定都是爬蟲,決定直接下掉。

B閘道器針對GET介面的監控

7. 小程式看著沒啥效果,確定了下流量是從Color過來的,此時B閘道器能做的都做了,轉戰Color平臺,聯絡神盾

先不考慮開啟登陸態,看看神盾能做些什麼策略調整,是否有效果。

8. 神盾人員分析驗數結果之後:

a. 神盾識別到一些沒傳uuid的情況,我們客戶端各端確定uuid都必傳,那麼這部分就是刷子, 配置uuid為空就攔截的策略,來逼迫黑產傳uuid來讓反爬跟uuid相關的模型生效

b. 加固開啟加嚴規則灰度10%,

c. 反爬開啟增加識別策略

color閘道器的安全監控效果

9. 到此這個階段就相對比較OK了, 但是爬蟲那邊也在對抗破解改變策略繼續爬,安生了幾天,直到6月6號凌晨android平臺有大量異常流量,再之後就開始慢慢的有規律的異常流量曲線,說明對方已經破解了開始繼續爬了。並且android端效能監控比日常tp99翻倍,觸發報警,懷疑可能在爬商品資料量大的商家

color閘道器android端6月6號激增異常流量

服務端android端監控6月7號開始了日常爬蟲,說明已破解

反饋之後,補充識別策略,繼續加嚴,另外小號有識別無攔截,是之前申請開啟小號沒透過,再次溝通開啟,開啟之後有效果。效果如下:

color閘道器安全監控的小號監控效果

10. 但android還是有爬蟲,效能沒恢復,那麼考慮開啟頻控,按單pin10次,無效果,單pin5次無效果,最終在夜裡決定嘗試開啟下color閘道器的登陸態,效果立竿見影,效能恢復,說明是未登陸的使用者來的爬蟲,這也是為什麼按pin限頻效果不明顯的原因,挑效能受影響最大的jddjAPP(android和ios)應用開啟,由於神盾的操作都是基於介面+應用維度,所以一開全開。

服務端android端監控

11. 但有個問題是客戶端各端遷移到color閘道器的時候都沒有去處理相容color閘道器的攔截預設返回結果所以各端顯示異常,好在color閘道器可以mock出參,想到按B閘道器開啟登陸態攔截的出參去mock來適配客戶端,找B閘道器要出參json如下:

{
  "type": "1",
  "code": "201",
  "msg": "為了您的賬號安全,請重新登入"
}

按上述出參mock後各端可以正常識別,但又發現新的問題是各個端的邏輯處理不一致, 登入態開啟ios端使用者體驗不好,並無法跳轉登陸 , 由於在color閘道器中android和ios是用的同一個應用名,而開啟登陸態的維度是應用維度,所以不得不關閉登陸態。

12. 測試和客戶端去確認前端各端是否有問題,以及後續對於登陸態的處理。 我們後端則跟前端一起思考下有沒有別的方案,經過討論有一種方案是mock反爬的出參code 605,但客戶端接入color的3個版本中最老的那個版本沒有接入反爬的sdk, 而閘道器開啟登陸態又沒法控制版本。

由於以上問題可行的方案是:ios端未接入反爬sdk的版本 降級呼叫B閘道器, 這樣color可以開啟登陸態。

但沒采用這個可行的方案,因為降級為B閘道器需要層層審批,這個時候也臨近大促結束,擔心審批流程太慢,或者有別的未知問題,所以沒采用。

13. 繼續諮詢color平臺的神盾側方案,給出的方案是反爬、加固、小號都繼續上加嚴,觀察有無客訴。加嚴到差不多的影響的情況下暫時告一段落。

14. 服務端兜底的反爬措施,我們具備的針對各端單獨設定限流閥值的能力,解決單端有問題不影響其他端,將影響降至最低。以及快速擴容的能力。

四、color閘道器反爬效果

總體來說color的神盾相關的反爬還是很強大的,效果顯著,在攻防之間一直有策略可以應對,點個贊,在此感謝相關人員,以及一起應對反爬的小夥伴們。

五、總結

在這次反爬經歷中也有很多需要反思總結和提高的地方,下面列了幾點給大家參考,希望本篇文章對大家有所幫助。

1.要儘量防患於未然,核心系統介面提前做好反爬的一些基礎工作,避免被臨時殺個措手不及。

2.涉及多閘道器的時候,要梳理爬蟲的來源及特徵,藉助各物理閘道器的反爬能力,針對性的處理。

3.登入態開啟需要提前測試確定影響,各端是否支援,使用者體驗是否受損,其它反爬措施同理。

4.微信小程式不能開啟強登陸,會被認為違規進行處罰。

5.之前對於color的反爬能力知之甚少,低估了反爬能力以為開啟了還有爬蟲就沒辦法了,但事實上color還有很多策略是沒有對外暴露的。

6.也不能認為爬蟲就一定要反爬乾淨,因為規則越嚴格,越有可能誤殺,需要再使用者體驗和反爬之間取個平衡,在保證使用者體驗的基礎上儘量提高爬蟲成本,減少爬蟲對系統的影響。

7. 後端需要具備的能力針對各端單獨設定限流閥值。解決單端有問題不影響其他端,將影響降至最低。

作者:京東零售 連迎迎
來源:京東雲開發者社群 轉載請註明來源

相關文章