V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
Snailzzz
V2EX  ›  全球工单系统

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

  •  1
     
  •   Snailzzz · 2019-06-20 08:45:51 +08:00 · 10071 次点击
    这是一个创建于 1743 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天晚上 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'
    

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

    • 这些接口调用微信小程序内部的 login 方法得到了 Code,通过 Code 可以在微信 API 接口中获取到 OpenID,没有发生错误。
    • 上条是否可以判定这些 Code 就是正确的 Code?
    • 如果可以判定这些 Code 是正确的 Code,在一分钟内发送了大概 1w+的 Code 并且获取到了 OpenID,但这些所有的请求的 UA 完全一致,并且使用了‘ x-forwarded-for ’伪造了 IP。

    截图

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

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

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

    第 1 条附言  ·  2019-06-20 09:38:15 +08:00
    在微信 mp 后台的统计数据中中并没有发现流量激增数据
    第 2 条附言  ·  2019-06-20 10:03:39 +08:00
    关于怀疑是爬虫的我统一回复一下大家,这些请求是访问了项目的业务 API 的,并不是爬虫
    35 条回复    2019-08-18 21:17:21 +08:00
    uqf0663
        1
    uqf0663  
       2019-06-20 08:54:30 +08:00
    既然 code 都能搞到了,getUserInfo 又有啥难度?
    Snailzzz
        2
    Snailzzz  
    OP
       2019-06-20 08:56:24 +08:00
    @uqf0663 你说的也有道理,感觉快要崩溃了,这样搞
    shoaly
        3
    shoaly  
       2019-06-20 08:56:27 +08:00
    这还挺神奇的, 如何可以批量获取到 code 呢..
    Snailzzz
        4
    Snailzzz  
    OP
       2019-06-20 08:58:42 +08:00
    @shoaly 我也是很奇怪,这些 Code 都可以在微信 API 中获取到 OpenID,这些 OpenID 还都是不重复的
    csys
        5
    csys  
       2019-06-20 08:59:30 +08:00 via Android
    不知道是你语言有问题还是我理解能力有问题

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

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

    目前我的 sdk 都是放 github 上开源的,就是为了让开发者用的安心。 有的黑心 sdk 还是压缩混淆加密的,就是为了暗地里做些勾当。。

    比如楼主这种情况,如果是第三方库,可以随时获取服务端的命令(获取 code )然后发送回服务端,这样对方就有了大量的 code~~
    Snailzzz
        27
    Snailzzz  
    OP
       2019-06-20 13:59:09 +08:00
    @z0ne 这个不太可能 这些请求的最终得到的 OpenID 都是新的
    z0ne
        28
    z0ne  
       2019-06-20 14:36:21 +08:00
    @Snailzzz 这就奇怪了,莫非是算法被逆向了 😂 保持关注
    php01
        29
    php01  
       2019-06-20 21:11:12 +08:00
    我怀疑你的的 code 或者 openid 下发到客户端了。又或者是员工测试暴露了,或者是数据库已经被人拿了
    Snailzzz
        30
    Snailzzz  
    OP
       2019-06-20 22:24:51 +08:00
    @php01 这种低级的错误不可能的,已经报告官方了,他们回复的是安全相关的同学在排查了
    AbrahamGreyson
        31
    AbrahamGreyson  
       2019-07-16 03:25:35 +08:00
    @Snailzzz 后续怎么样了,十分关注这件事,最终是如何防刷的。
    Snailzzz
        32
    Snailzzz  
    OP
       2019-07-26 20:17:59 +08:00
    @AbrahamGreyson 最终我们加上了授权登录 可以验证一下 官方态度一直很消极 最终也没有提出解决办法
    mrvv
        33
    mrvv  
       2019-08-17 20:15:25 +08:00 via iPhone
    找到原因了吗,我很想知道伪造 code 是否存在
    Snailzzz
        34
    Snailzzz  
    OP
       2019-08-18 06:35:07 +08:00
    @mrvv 确实是存在的 应该是反编译出微信的 xy 或者通过 hook 实现的
    mrvv
        35
    mrvv  
       2019-08-18 21:17:21 +08:00 via iPhone
    那你知不知道 code 产生的请求方法,按理说一个真实的微信才会产生一个真实的 code 啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5497 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 08:24 · PVG 16:24 · LAX 01:24 · JFK 04:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.