1. 程式人生 > >Python程式設計:騰訊防水牆原理淺析與Flask結合測試

Python程式設計:騰訊防水牆原理淺析與Flask結合測試

騰訊防水牆
地址:https://007.qq.com/

基本原理:
前端認證 + 後端認證

前端認證

前端引數
id : 元素的id(必須)
data-appid : AppID(必須)
data-cbfn : 回撥函式名(必須)
data-biz-state : 業務自定義透傳引數(可選)

介面傳送的引數比較多,不做列舉

返回引數
ret: 0, // 0 驗證成功, 1 未通過驗證
ticket: “String”,
randstr: “String”

後端認證

傳送引數
aid (必填)
AppSecretKey (必填)
Ticket (必填) 驗證碼客戶端驗證回撥的票據
Randstr (必填) 驗證碼客戶端驗證回撥的隨機串
UserIP (必填) 提交驗證的使用者的IP地址(eg: 10.127.10.2)

返回引數
response 1:驗證成功,0:驗證失敗,100:AppSecretKey引數校驗錯誤[required]
evil_level [0,100],惡意等級[optional]
err_msg 驗證錯誤資訊[optional],檢視詳細說明

原理淺析

現在捋一捋引數傳遞的方式

  1. 前端 帶著 AppID 和 其他引數向騰訊驗證中心驗證
  2. 騰訊驗證中心 將驗證結果 ticket + randstr 返還給前端
  3. 前端 將得到的引數 ticket + randstr 傳遞給 後端
  4. 後端 將前端傳遞過來的引數 aid/AppSecretKey/Ticket/Randstr/UserIP 向 騰訊驗證中心
    進行二次驗證

如圖

所以,這個是前後端二次驗證的機制,騰訊驗證中心 充當了鑑權中心
關鍵點在於第四步,後端 直接向騰訊驗證中心 進行最後確認
如果要破解,應該在步驟1上做文章,其他步驟有點難。。。

參考騰訊防水牆給出的文件,使用Flask做了一個簡單的Demo,供參考

Demo地址:https://github.com/mouday/TencentCaptcha

在這裡插入圖片描述