- 临时登录凭证code的作用机制到底是怎样的?直接获取微信用户id的做法有什么问题呢
教程中专门阐述了这个问题,https://developers.weixin.qq.com/ebook?action=get_post_info&token=935589521&volumn=1&lang=zh_CN&book=miniprogram&docid=000cc48f96c5989b0086ddc7e56c0a#_ftn5,但是不能很好地帮助理解,特别是:
如果直接通过wx.login获取微信用户id。假设现在我们有个接口,通过wx.request请求 https://test.com/getUserInfo?id=1拉取到微信用户id为1在我们业务侧的个人信息,那么黑客就可以通过遍历所有的id,把整个业务侧的个人信息数据全部拉走。
这个临时身份证5分钟后会过期,如果黑客要冒充一个用户的话,那他就必须在5分钟内穷举所有的身份证id,然后去开发者服务器换取真实的用户身份。显然,黑客要付出非常大的成本才能获取到一个用户信息。
怎么遍历、穷举?是穷举openid吗?
所谓冒充一个用户是怎么冒充?
按这个意思就是5分钟之内要拿这个code去一遍又一遍地换取openid,拿什么去换?肯定是要登录一个微信才能去操作啊。
比较混乱,希望有专业清晰的解答。
回答题目中两个问题:
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,对系统并没有危害。
通过code 去后端换取用户的openid,每个用户对应每个小程序的openid 是唯一的,code 每五分钟更换一次,即使更换了,这个用户的openid 也不会改变,这样就能保证用户的信息不被轻易窃取
我主要关心,所谓的对id的遍历、穷举是什么意思
顶一下