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

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

  •  1
     
  •   Snailzzz · 119 天前 · 3439 次点击
    这是一个创建于 119 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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