收藏
回答

临时登录凭证code的作用到底是什么,怎么阻止黑客的

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 需求 wx.login 客户端 6.7.2 2.2.3

- 临时登录凭证code的作用机制到底是怎样的?直接获取微信用户id的做法有什么问题呢


教程中专门阐述了这个问题,https://developers.weixin.qq.com/ebook?action=get_post_info&token=935589521&volumn=1&lang=zh_CN&book=miniprogram&docid=000cc48f96c5989b0086ddc7e56c0a#_ftn5,但是不能很好地帮助理解,特别是:

  1. 如果直接通过wx.login获取微信用户id。假设现在我们有个接口,通过wx.request请求 https://test.com/getUserInfo?id=1拉取到微信用户id为1在我们业务侧的个人信息,那么黑客就可以通过遍历所有的id,把整个业务侧的个人信息数据全部拉走。

  2. 这个临时身份证5分钟后会过期,如果黑客要冒充一个用户的话,那他就必须在5分钟内穷举所有的身份证id,然后去开发者服务器换取真实的用户身份。显然,黑客要付出非常大的成本才能获取到一个用户信息。


怎么遍历、穷举?是穷举openid吗?

所谓冒充一个用户是怎么冒充?

按这个意思就是5分钟之内要拿这个code去一遍又一遍地换取openid,拿什么去换?肯定是要登录一个微信才能去操作啊。


比较混乱,希望有专业清晰的解答。


最后一次编辑于  2018-09-09  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • Band🕹
    Band🕹
    2018-09-11

    回答题目中两个问题:


    1、如果直接通过接通过wx.login获取微信获取微信用户id。假设现在我们有个接口,通过,通过wx.request请求 h请求 请求 https://test.com/getUserInfo?id=1拉取到微拉取到微信用户id为1在我们业务侧的个人信息,那么黑客就可以通过遍历所有的id,把整个业务侧的个人信息数据全部拉走。


    openid不具有随机性,所以openid不能像code,session_key,或者appsecret那样成为安全的私密信息。黑客完全可以越过微信官方自己尝试枚举碰撞。如果你的系统直接接受外界提供的openid来确认用户身份,那么的确存在“业务的所有个人数据被全部拉走”的风险。

    所以解决办法是你的系统不能直接信任openid,而是自行生成自建登录态来映射这个openid。自建登录态只要加入简单的随机性就能有效防止碰撞攻击。



    2、这个临时身份证5分钟后会过期,如果黑客要冒充一个用户的话,那他就必须在5分钟内穷举所有的身份证id,然后去开发者服务器换取真实的用户身份。显然,黑客要付出非常大的成本才能获取到一个用户信息。



    临时身份凭证code,微信官方保证其随机性,而且有效期只有5分钟,能有效防止黑客枚举碰撞攻击。

    黑客只有在破解自身客户端的情况下才有可能拿到code,但是那也只能拿到自己的微信账号对应的code,对系统并没有危害。

    2018-09-11
    赞同
    回复
  • จุ๊บ
    จุ๊บ
    2018-09-09

    通过code 去后端换取用户的openid,每个用户对应每个小程序的openid 是唯一的,code 每五分钟更换一次,即使更换了,这个用户的openid 也不会改变,这样就能保证用户的信息不被轻易窃取

    2018-09-09
    赞同 1
    回复 1
    • Toni
      Toni
      2018-09-09

      我主要关心,所谓的对id的遍历、穷举是什么意思

      2018-09-09
      回复
  • Toni
    Toni
    2018-09-10

    顶一下

    2018-09-10
    赞同
    回复