在hbuilder中开发移动app的时候是非常方便的,比如一个登录的模板已经是现成的了。只需要简单的配置key、secret即可完成第三方app的安装检测、登录授权。
但,当看到需要填写secret的时候,就心存疑问,这个不会最终打包到app里吧?是否会混淆成多段并加密保存?
答案是:竟然是明文存储。(在打包后的Info.plist文件中)
<key>tencentweibo</key>
<dict>
<key>appSecret</key>
<string>f11b86520d90ae710e6c782b8f8cd8b2</string>
<key>appkey</key>
<string>801495246</string>
<key>redirectURI</key>
<string>http://www.dcloud.io/</string>
</dict>
<key>umeng</key>
<dict>
<key>appkey</key>
<string>5379d57656240b5493130a40</string>
</dict>
<key>weixinoauth</key>
<dict>
<key>appSecret</key>
<string>08318480*****手动打码******c212775</string>
<key>appid</key>
<string>wxcb129***手动打码****1b4</string>
</dict>
知道oauth原理的都知道,appSecret的保密级别是有多高。拿到了它可以以此应用做任何事儿。
比如,用户经过授权后,我们能拿到他的access_token,我们可以用此access_token操作任何第三方平台授权的接口调用。
比如微信开放平台给的一段说明(摘自:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&lang=zh_CN):
注意:
1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。
建议将Appsecret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。
建议官方提供中转接口配置,或者提供更底层的方法,让用户自行实现oauth第三方登录授权。
e***@163.com
但是这样做还是避免不了 appsecret 出现在客户端,如果恶意攻击者嗅探 app发出给微信服务器的http包,依然能够获取到appsecret。
2018-03-07 17:28
DCloud_App_Array
下发appsecret可以采用数据加密来处理,第三方登录平台授权是也是https传输,通常会保证安全性的。
当然后续我们也会支持在服务器获取access_token再交给客户端来处理的模式。
2018-03-07 17:38
wclssdn (作者)
官方还真的优化了这个缺陷。。。棒棒哒~~
2018-05-11 16:33