ctycode
ctycode
  • 发布:2022-05-11 12:03
  • 更新:2022-05-13 18:17
  • 阅读:772

一些uniCloud风控方面的问题

分类:uniCloud

我目前使用的是uniCloud阿里云版,有几个问题想要咨询下

  1. 目前在服务端是uniCloud的时候,虽然使用 x-serverless-sign 对请求体进行了签名,但是对于重放攻击的防护等级很低,甚至请求后的一段时间内复用请求都能通过网关的校验,拿到数据。

    所以当在客户端(APP)使用uniCloud.callFunction调用云函数的时候,我能否操作请求头,在请求头中增加一些风控参数的字段?或者操作User-Agent? 然后我自己在云函数中做校验。

  2. 现在的客户端调用uniCloud请求中总会在params中传递clientInfo字段

    {  
    "clientInfo":{  
        "PLATFORM":"app-plus",  
        "OS":"ios",  
        "APPID":"__UNI__XXXXXXX",  
        "DEVICEID":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",  
        "CLIENT_SDK_VERSION":"X.X.XX",  
        "LOCALE":"zh-Hans"  
    }  
    }

    能不能通过把这些字段精简为一个DeviceId的方式传递呢?

  3. 使用uniCloud.callFunction调用云函数的时候,请求的域名能不能修改为开发者自己的域名?现在的域名是api.bspapp.com.

4.还有一个就是说云函数里mongodb数据库查询速度有点慢,按理来说应该mongodb应该比SQL数据库的速度快,在我本地测试中(部署在云服务器上SQL数据库1c1g 1m),同样的数据,主键也相同,数据量也不大,查询也很简单,云函数mongodb的速度比SQL慢了1倍左右,这里我不太明白,是因为阿里云免费空间的配置低的原因吗?

2022-05-11 12:03 负责人:DCloud_uniCloud_WYQ 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

  1. 请求头无法修改,你可以加在请求体里面
  2. 你要只传一个deviceId是要请求体变小吗?
  3. 可以替换为自己的域名,将自己的域名cname到api.bspapp.com,然后使用uniCloud.init方法传入自己的域名作为endPoint,使用此方法的返回值来调用callFunction等方法
  4. 你使用的是什么时候创建的服务空间?云函数访问数据库是比传统服务器慢一些,因为并非直接连接到了数据库,而是通过访问云厂商的连接池来访问数据库
  • ctycode (作者)

    感谢回复



    1. 感觉放在请求头更优雅一些,无法修改就算了。

    2. 是不想暴露太多信息出来,网络攻击防不胜防。

    3. 这个办法学习了,感谢。

    4. 创建的话应该是四月中旬吧,了解了。

    2022-05-11 14:06

  • ctycode (作者)

    回复 s***@ctycode.io: 这回复的格式怪怪的

    2022-05-11 14:06

  • DCloud_uniCloud_WYQ

    回复 s***@ctycode.io: 2的话不算暴露什么信息,客户端信息没有什么机密

    2022-05-11 14:12

  • yayayiyi

    我想知道一下 他的请求头签名是根据什么来签名的,别人反编译了前端是否就能破解签名呢?

    2022-05-12 21:04

  • DCloud_uniCloud_WYQ

    回复 yayayiyi: 签名只是一层简单的防御,只要客户端能实现的都是可以被模拟的

    2022-05-13 14:53

  • ctycode (作者)

    回复 yayayiyi: 建议在后端也做些风控

    2022-05-13 17:41

ctycode

ctycode (作者)

无论原生App还是js都会被破解,没有绝对的安全。原生App还能使用一些加固、SO、VMP之类的办法抵抗一下,反过来看js的破解难度比原生App的破解难度小很多,甚至就算加密混淆的一塌糊涂的时候都可以使用web-rpc调用关键逻辑。所以建议大家对重要业务在后端做一些风控,这里我提供个思路,增加一个上报日志机制,App从启动开始向服务端(比如定时三秒一次) 上传当前设备信息以及环境的信息,必要时对关键业务进行埋点,如果条件允许就实时分析日志中的异常,不能实时就要定时,比如云函数中的定时任务,监测到异常的时候,可以限制deviceId访问频率,限制关键接口调用,或者直接封禁deviceId,当然你返回假数据也不是不可以,某顶流短视频App就是这么做的。另外也可以效仿某次顶流短视频App的做法,某次顶流的deviceId注册需要向服务端发包5次才能激活,5个包里把设备特征、环境、甚至是本机安装的App列表等等传回服务器进行分析,App列表中若是包含Root类应用的时候,直接会被降权,一些关键接口就不给访问。如果你有更好的风控机制也欢迎一起讨论下。

该问题目前已经被锁定, 无法添加新回复