【严重安全风险】“云调用直接获取开放数据”如果用户使用自己构造的参数调用,云函数无法验证用户数据?
文档位置: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud 问题描述: 根据文档描述,小程序端获取到cloudID后,将cloudID传给云函数,云函数会自动将cloudID替换为解密后的值。 如果用户按照解密后的数据结构构造参数调用云函数,云函数无法判断收到的数据是否是由cloudID解密而来。 举个例子: 小张参照着文档(https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) 写了如下代码,来获取用户手机号: ////// 前端 //////// wx.cloud.callFunction({ name: modifyPhone, data: { phoneCloudID: wx.cloud.CloudID(xxx) } }) //////// 云函数 /////// exports.main = async (e) => { // 获取解密后的手机号,但是无法保证这个数据不是伪造的! const phone = e.phoneCloudID.data.phoneNumer } 小黑可以这样手动构造参数,来欺骗小张写的modifyPhone云函数: wx.cloud.callFunction({ name: modifyPhone, data: { phoneCloudID:{ cloudID:"11111111", data:{ phoneNumber: "17777777777" } } } }) 到此小程序就认为小黑的手机号为17777777777。 [图片] [图片] [图片]