微信小程序中登录 code 可以“伪造”?

2019-06-20 08:45:51 +08:00
 Snailzzz

昨天晚上 21 点 34 分左右,服务器涌入大量请求,这些请求的 UA 完全一致

  'user-agent' => 'Mozilla/5.0 (Linux; Android 6.0.1; C106 Build/ZAXCNFN5902606201S; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 MicroMessenger/6.6.7.1321(0x26060739) NetType/WIFI Language/zh_CN'

很奇怪,主要有一下几点疑问

以我的猜测,这些 Code 确实是正确的 Code,但是可能是从 Q 控 /X 议里面批量得到的,然后某些人收购 Code,通过这些 Code 批量请求

目前的解决方案,增加用户授权的操作,通过微信的 wx.getUserInfo 方法中 encryptedData 返回值判断。

这种方法增加了用户的操作,整体流程繁琐了,不知道大家有没有什么好的解决办法。

10147 次点击
所在节点    全球工单系统
35 条回复
uqf0663
2019-06-20 08:54:30 +08:00
既然 code 都能搞到了,getUserInfo 又有啥难度?
Snailzzz
2019-06-20 08:56:24 +08:00
@uqf0663 你说的也有道理,感觉快要崩溃了,这样搞
shoaly
2019-06-20 08:56:27 +08:00
这还挺神奇的, 如何可以批量获取到 code 呢..
Snailzzz
2019-06-20 08:58:42 +08:00
@shoaly 我也是很奇怪,这些 Code 都可以在微信 API 中获取到 OpenID,这些 OpenID 还都是不重复的
csys
2019-06-20 08:59:30 +08:00
不知道是你语言有问题还是我理解能力有问题

这些接口调用微信小程序内部的 login 方法得到了 Code

你不是已经知道 code 怎么来的了么
Snailzzz
2019-06-20 09:02:12 +08:00
@csys 抱歉,我表达有点不清楚,这些 Code 从正常流程来说,是微信小程序的开放方法 Login 获取到的,然后发送给后端,后端拿这个 Code 去微信那里请求获得 OpenID 等信息,但是同时这么多 Code 并且请求项目的后端的 UA 完全一致,小程序统计那里也没有人数的剧增
uqf0663
2019-06-20 09:03:01 +08:00
@csys 不是,通常这个 code 是用户手动进入小程序 wx.login 时获得的,楼主的意思是对方使用了诸如破解协议之类的手段自动化获取
leo108
2019-06-20 09:03:19 +08:00
只要羊毛足够大,能调动万把微信号来薅羊毛的黑产多得是
Snailzzz
2019-06-20 09:04:49 +08:00
@leo108 除了增加他们薅的难度,没有杜绝的方法了吗。。
leo108
2019-06-20 09:05:34 +08:00
yushiro
2019-06-20 09:05:50 +08:00
我记得微信的文档里面是不建议把 openid 下发给客户端的,如果按照文档这样做,这个批量请求就没有价值了
Snailzzz
2019-06-20 09:06:48 +08:00
@yushiro 我没有下发客户端,存了数据库之后下发的是项目自定义的一个 SessionId
miaotaizi
2019-06-20 09:08:24 +08:00
所以手机号什么的还是有必要的
Snailzzz
2019-06-20 09:09:34 +08:00
@miaotaizi 如果加了手机号整体流程就太拖沓了
Snailzzz
2019-06-20 09:10:25 +08:00
@leo108 验证码的话流程太拖沓,不知道活动反欺诈服务这个是不是免费提供,感觉这种服务价格都挺高的
uqf0663
2019-06-20 09:10:54 +08:00
@shoaly 一点也不神奇,关键词“微信 ipad 协议”“微信安卓协议”有各种成品推广的软文,还有某些免费的试用版,可以自动批量聊天、管理群、加人、发红包抢红包、爬取朋友圈、公众号等各种原本是加密跟各种鉴权的操作。简单总结就是他们通过反编译微信的客户端,然后模拟微信客户端的各种操作。基于此自动获取小程序的 code 也不是啥难事,我猜测小程序的 code 的生成大概有两种可能,一种是本地通过特定的加密方式把一些信息加密,而微信的服务端解密得到这些信息再通过开发者的接口请求返回,另外一种是直接请求微信的服务端得到这个 code。。。无论哪一种看起来破解难度都很低。
Snailzzz
2019-06-20 09:13:00 +08:00
@uqf0663 因为我之前接触过 Ipad/安卓 X 议,所以我感觉这是唯一一种可能了,我只是也是感觉 getUserInfo 相对于获取 Code 难度更高点而已
uqf0663
2019-06-20 09:15:44 +08:00
@Snailzzz 如果是使用触控精灵之类的东西实现的,小程序统计肯定有数据,如果小程序统计那里也没有人数的剧增,那 100%就是破解协议了。
Snailzzz
2019-06-20 09:17:46 +08:00
@uqf0663 小程序统计那里是没有相关的趋势数据的,
uqf0663
2019-06-20 09:39:55 +08:00
@Snailzzz 在不破坏用户体验(例如加各种交互性的验证)的前提下,想要拦住协议或者触控精灵类的东西基本不可能。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575679

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX