Python程式設計:騰訊防水牆原理淺析與Flask結合測試
阿新 • • 發佈:2018-11-08
騰訊防水牆
地址: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],檢視詳細說明
原理淺析
現在捋一捋引數傳遞的方式
前端
帶著 AppID 和 其他引數向騰訊驗證中心
驗證騰訊驗證中心
將驗證結果 ticket + randstr 返還給前端
前端
將得到的引數 ticket + randstr 傳遞給後端
後端
將前端傳遞過來的引數 aid/AppSecretKey/Ticket/Randstr/UserIP 向騰訊驗證中心
如圖
所以,這個是前後端二次驗證的機制,騰訊驗證中心
充當了鑑權中心
關鍵點在於第四步,後端
直接向騰訊驗證中心
進行最後確認
如果要破解,應該在步驟1上做文章,其他步驟有點難。。。
參考騰訊防水牆給出的文件,使用Flask做了一個簡單的Demo,供參考