wclssdn
wclssdn
  • 发布:2016-04-03 13:37
  • 更新:2018-03-07 17:31
  • 阅读:2890

mui明文存储第三方appSecret的疑问

分类:MUI

在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第三方登录授权。

2016-04-03 13:37 负责人:无 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

目前API中支持js动态传入配置参数AuthOptions
提交打包时可以填写任意的appsecret值,在调用js时传入正确的值即可,避免appsecret泄漏。
在js中可以加密保存,也可以从服务器动态获取来保证appsecret的安全性。
如下示例:

// ...  
var auth=auths['weixin'];  
auth.login(function(){  
        console.log("微信登录认证成功:");  
        // ..  
    },function(e){  
        console.log("微信登录认证失败:");  
        // ...  
    },{  
        appid:'正确的微信appid',  
        appsecret:'正确的微信appsecret'  
    });  
// ...

注意:由于iOS云端打包会将appid设置为应用的scheme,用于支持从微信中返回,因此建议填写正确的appid。

  • explorer_mt@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

explorer_mt@163.com

explorer_mt@163.com

持续关注中,希望官方重视这个问题。 万一出现 hbuidler 制作的app 被大规模反编译,泄露大量 appsecret,对这个框架的打击会是致命性的。

DCloud_App_Array

DCloud_App_Array

目前确实是这样的, 我们正在调研将appsecret信息通过参数传入,避免存储在客户端导致的风险。

  • Rudy

    manifest.json 里面牵扯到第三方的配置信息都应该加密

    2016-04-05 15:53

  • wclssdn (作者)

    赞~ 期待啊!~~

    2016-04-05 21:39

  • wclssdn (作者)

    话说,你们有计划了么? 还有,secret只能在服务端,不能下发的。

    2016-04-19 19:24

  • MaxPang

    请问这个有进展?

    2017-02-08 10:39

云海帆

云海帆 - 咨询问题请+Q1395641578

我也发现了,自己调用的JS里面存的key 也是明文,貌似只能加密,还有啥好办法吗?

  • wclssdn (作者)

    appKey? 那个值泄漏也没关系,不敏感。。没有appSecret啥也干不了。。

    2016-04-05 21:40

  • 云海帆

    回复 wclssdn: appSecret也是明文的

    2016-04-06 11:26

该问题目前已经被锁定, 无法添加新回复