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",
}
}
})
你自己试着破解一下呗。
验证一下,几分钟的事。
只能把用户上传的一切数据预设为不可信,把云开发自带的解包结果当不存在处理,只取cloudID,然后调用下面这个接口获取官方的数据
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/Cloud.getOpenData.html
但是即使如此,也不能避免重放攻击。要是想避免重放攻击可能只能加个redis配合超时检测
不知道有没有我理解不对的方法
测试数据:
{
"service": "test",
"type": "getArguments",
"data": {
"aa": "bb"
},
"cc": {
"cloudID": "27_Ih-9vxDaOhIbh48Bdpk90DUkUoNMAPaNtg7OSGM-P2wPEk1NbspjKGoql_g",
"data": {
"stepInfoList": [
{
"step": 9103,
"timestamp": 1571673600
},
{
"step": 9783,
"timestamp": 1571760000
}
],
"watermark": {
"appid": "wx3d289323f5900f8e",
"timestamp": 1574338655
}
}
}
}
}