版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
小程序提供了一個auth驗證接口,使小程序不需要額外登錄,就可以讓開發者獲得用戶的唯一標識openid。調用方法如下:
wx.login({
success:resp=>{
const code = resp.code;
//DoSomthing 攜帶code請求服務器
}
})
經過測試發現,code沒有順序性,例如在一段時間內請求了多個code,隨便選一個都可以在微信提供的接口上驗證成功並獲得Openid。但是每個code只能驗證一次,並且只有五分鍾時效性(未測試)。
我要說的其實是偽造appId,從而獲取code,並偽造登錄。
小程序開發工具里是不允許修改appId為一個自己不是開發者的appId值的,所以必須搞清楚wx.login的時候微信生成這些code的原理。
經過給開發者工具設置代理並抓包,發現每次wx.login都進行了一次網絡請求:

這個請求是由以下幾部分組成的:
請求頭:
POST /wxa-dev-logic/jslogin?_r={{random}}&newticket={{ 用戶的另一個唯一標識,可偽造 }}&appid={{appId}}&platform=0&ext_appid=&os=win&clientversion=1021905151&os=win&clientversion=1.02.1905151&osversion=6.1.7601 HTTP/1.1
host: servicewechat.com
content-length: 25
Connection: close
POST數據:
{"scope":["snsapi_base"]}
