收藏
回答

云开发如何避免CloudId的信息是用户直接传进来的?

https://developers.weixin.qq.com/minigame/dev/wxcloud/reference-sdk-api/open/Cloud.CloudID.html

拿官网案例说

callFunction的参数是

wx.cloud.callFunction({
  name: 'myFunction',
  data: {
    weRunData: wx.cloud.CloudID('xxx'), // 这个 CloudID 值到云函数端会被替换
    obj: {
      shareInfo: wx.cloud.CloudID('yyy'), // 非顶层字段的 CloudID 不会被替换,会原样字符串展示
    }
  }
})


小程序自动解析的event是

"weRunData": {
    "cloudID": "27_Ih-9vxDaOhIbh48Bdpk90DUkUoNMAPaNtg7OSGM-P2wPEk1NbspjKGoql_g",
    "data": {
      "stepInfoList": [
        {
          "step": 9103,
          "timestamp": 1571673600
        },
        {
          "step": 9783,
          "timestamp": 1571760000
        }
      ],
      "watermark": {
        "appid": "wx3d289323f5900f8e",
        "timestamp": 1574338655
      }
    }
  },
  "obj": {
    "shareInfo": "xxx"
  }


但是如果我是用于获取手机号、支付这种敏感的操作,我需要验证用户数据的真实性,我怎么知道这个数据不是用户伪造直接传给我的呢?

比如如下的调用方式:

wx.cloud.callFunction({
  name: 'myFunction',
  data: {
    weRunData: {
      "cloudID": "27_Ih-9vxDaOhIbh48Bdpk90DUkUoNMAPaNtg7OSGM-P2wPEk1NbspjKGoql_g",
      "data": {
        "stepInfoList": [
          {
            "step": 9103,
            "timestamp": 1571673600
          },
          {
            "step": 9783,
            "timestamp": 1571760000
          }
        ],
        "watermark": {
          "appid": "wx3d289323f5900f8e",
          "timestamp": 1574338655
        }
      }
    },
      obj: {
        shareInfo: "xxx",
      }
    }
  })
回答关注问题邀请回答
收藏

1 个回答

  • 老张
    老张
    2021-11-07

    你自己试着破解一下呗。

    验证一下,几分钟的事。

    2021-11-07
    有用
    回复 1
    • 彼端。¬_¬`
      彼端。¬_¬`
      2021-11-08
      验证过了,在本地调试测试的,没什么办法。。可以看起来和微信云开发自带的解包提供的数据一模一样
      只能把用户上传的一切数据预设为不可信,把云开发自带的解包结果当不存在处理,只取cloudID,然后调用下面这个接口获取官方的数据
      https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/Cloud.getOpenData.html
      但是即使如此,也不能避免重放攻击。要是想避免重放攻击可能只能加个redis配合超时检测


      不知道有没有我理解不对的方法
      测试数据:
      2021-11-08
      回复
登录 后发表内容