精華
原創(chuàng)聲明:本文為作者原創(chuàng),未經(jīng)允許不得轉(zhuǎn)載,經(jīng)授權(quán)轉(zhuǎn)載需注明作者和出處
可以知道:
wx.getUserInfo()返回的signature只能驗證“用戶基本信息”數(shù)據(jù)完整性。
單獨的
檢驗數(shù)據(jù)完整性1:通過AES-128-CBC、PKCS#7、密鑰、初始向量,把“用戶敏感信息明文”加密為密文(encryptedData)
2:把“密文encryptedData”,“初始向量iv“等用戶信息發(fā)送到小程序*
1:小程序調(diào)用wx.getUserInfo()接口,得到“密文encryptedData”,“初始向量iv“等用戶信息
2:把數(shù)據(jù)發(fā)送給服務(wù)器
1:通過AES-128-CBC、psck#7、密鑰、初始向量,把密文encryptedData解密為“用戶敏感信息明文”
此過程詳情,請查看:
3:AES加密與Base64編碼(加解密、簽名系列)
.
由圖可知,除了appid是雙方可約定的,其他信息都是用戶的個人信息(不同用戶數(shù)據(jù)不同)
開發(fā)者解密后“用戶敏感信息明文”后,用戶不同信息不同,具有隨機性。
假如黑客把encryptedData或iv修改后,因為解密后的數(shù)據(jù)的隨機性,開發(fā)者無法知道數(shù)據(jù)的完整,是否被修改。
有了openid,開發(fā)者只需要比對解密后的“用戶敏感信息明文”中的openid和小程序后臺的openid是否一致即可。
如果黑客把encryptedData或iv修改后,解密后“明文信息”肯定和“用戶敏感信息明文”相同,所以得到的openid自然也不同。
綜上所述:
開發(fā)者只要校驗“從密文解密后得到的appid”和自身appid是否一致,即可驗證數(shù)據(jù)的完整性、安全性。
此外:
在用戶敏感數(shù)據(jù)中的timestamp
:
是微信服務(wù)器響應(yīng)小程序調(diào)用wx.getUserInfo(),把敏感信息密文發(fā)送到小程序時的時間戳,用于自己服務(wù)器檢驗數(shù)據(jù)的時效性。