收藏
回答

关于云函数的问题,云函数被刷子直接调用,获取云函数的返回值,这个过程没有触发过小程序端内部埋点?

背景和问题:小程序会做运营活动,拉取新用户获得奖励,但被刷子批量注册用户(小程序注册时不想让用户获取手机号验证码)。

如何察觉: 通过埋点发现。正常用户使用小程序会有对应的埋点记录,但这些批量的用户没有触发小程序端内部埋点,只有后端注册时的单一埋点被触发。

具体描述:小程序注册步骤是

1、wx.login --> 跟后端交互 --> 获取得到用户的微信信息,

2、同上 --> 然后获取用户的手机号

3、自己的后端处理、注册用户

这样的流程出现的问题是:有刷子能以正常的方式获取到有效的code,并和后端正常通信处理、获取到微信信息以及手机号,然后模拟这种方式批量注册新用户。

基于以上情况,我们在上面的【步骤1】和【步骤2】中向后端发送时增加了一个字段A,使用云函数做加密功能,加密后的字符串作为字段A的值返回给后端解密,后端解密成功代表该用户正常调用了云函数 (这样做的原因是我理解云函数和小程序唯一绑定,只能对应小程序调用,并且有调用权限限制,即 Cloud.getWXContext()  获取到的SOURCE调用来源,限制为wx_client,只有微信小程序调用才可触发云函数)

// 这是我云函数的部分代码  代码段01
const log = cloud.logger()
const wxContext = cloud.getWXContext()
if (
  wxContext.SOURCE !== 'wx_client'|| wxContext.ENV === 'local' 
) {
  log.error(wxContext)
  returnerror‘
}
log.info(wxCont)

...

但是通过对云函数进行了日志记录,发现刷子还是能正常调用云函数,获取到云函数返回的数据,继续批量请求后端注册接口,并成功注册。


想要被解答的疑问:想知道云函数是否只能被对应小程序唯一绑定并且调用,【代码段01】我已经限制了调用端只能为小程序,并链路只有单一一次,为什么还是有第三方能成功脱离小程序客户端调用我的云函数?


最后一次编辑于  2021-12-28
回答关注问题邀请回答
收藏

3 个回答

  • 老张
    老张
    2021-12-28

    1、云函数不可破。

    2、对方只是跳过了你小程序端的埋点,以正常身份执行到了云函数这一步,去排查吧。

    2021-12-28
    有用 1
    回复 3
    • 如鲸向海
      如鲸向海
      2021-12-28
      你好 因为这个问题基本从年初持续到现在,也没和微信完整沟通过,我们改用云函数,做了调用端限制之后,还是存在刷子的情况,对于你说的1、2点我们都有怀疑过:
      点1:我们不太熟悉云函数调用机制,不清楚到底是否存在模仿参数成功调用云函数的问题(有点点怀疑 云函数不可破 这个概念😅);
      点2:我们也想办法去论证、调查过第三方是怎么能以正常身份执行到了云函数这一步,但没有明确的结果。因此才来社区寻求解答,希望能向你们请教,确定问题,找到解决方法, 如果有思路的话,希望不吝赐教🙏🏻
      2021-12-28
      回复
    • 老张
      老张
      2021-12-28回复如鲸向海
      你反证一下呗:如果云函数可破,你觉得论坛里就只有你一人发这种贴子?云开发支付也是云函数,你觉得可以破解了被随便偷钱?现在无非是如何排查的问题,1、你在所有callFunction之前打断点呗。2、在云函数里埋点,看看调用者的真实身份是谁,比如通过from_openid去库里查一下他的头像昵称;3、或者你自己破解一个别人的云函数试试,成功了去打微信脸。
      2021-12-28
      回复
    • 如鲸向海
      如鲸向海
      2021-12-28回复老张
      好的,多谢指点。点2 我们已经查过,IP地址是多变的,头像昵称等相关信息的我们也排查过,我们再多做些其他调查。非常感谢🙏🏻
      2021-12-28
      回复
  • Enjoy
    Enjoy
    2023-07-28

    大兄弟,你这个后来怎么解决了?有什么方案可以交流一下。

    2023-07-28
    有用
    回复
  • 陈宇明
    陈宇明
    2021-12-28

    应该是调用方模拟了请求头参数

    2021-12-28
    有用
    回复 1
    • 如鲸向海
      如鲸向海
      2021-12-28
      你好  能具体说下原理吗?是调用方可以直接模拟请求头参数、伪装成小程序端调用云函数吗?(即 通过了【代码段01】的校验?)还是其他;有什么方法能识别或者阻止吗?劳烦帮忙解答下🙏🏻
      2021-12-28
      回复
登录 后发表内容