微信小程序,有什么办法可以防止别人破解我的接口?

2023-10-10 13:56:32 +08:00
 haython

目前有 2 种想法,一种是每次请求弄个加密的签名,不过我记得好像是可以拿到小程序的源码,前端的东西,肯定会被人拿到加密算法;第二种是小程序云开发,走微信自己的协议,转发一下请求,这种就是太麻烦,绕一圈,求教各位大佬还有别的招术吗?

7157 次点击
所在节点    程序员
85 条回复
zhcode
2023-10-10 14:21:03 +08:00
加密算法写到 wasm 里面
worldqiuzhi
2023-10-10 14:27:36 +08:00
你限制接口登录才能访问不就行了吗。一个微信账号才能刷一次 成本就很高了
haython
2023-10-10 14:37:55 +08:00
@worldqiuzhi 不行,因为我肯定是登录之后,才刷接口,就像签到一样
haython
2023-10-10 14:40:47 +08:00
@zhcode 不确定能不能行,如果别人不破解 wasm ,直接复制了我的 wasm,直接调用加密方法就行了吧
iOCZ
2023-10-10 14:56:04 +08:00
这么有价值?
cat
2023-10-10 15:00:37 +08:00
1. 是的,可以拿到小程序源码,上个月刚拿了一个
2. 没有绝对的“防止”,只有提高破解者的成本,比如自签名就是一种,一般破解者对普通程序 也就抓个包什么的,搞不到就算了,如果你的程序价值特别高,你要考虑其它方式给用户使用,而不是放在小程序,或者从账户层面做限制
me1onsoda
2023-10-10 15:06:49 +08:00
@cat 怎么拿
4ark
2023-10-10 15:07:22 +08:00
每个请求都带上一个 wx.login 拿到的 code ,后端检验,虽然也有解决方案,但已经能挡下一大批脚本小子了
jadelike
2023-10-10 15:08:35 +08:00
jwt 里加时间戳啊,加密的时间戳,时间戳不对就 return error
Ashore
2023-10-10 15:09:13 +08:00
@me1onsoda 有专门的解压工具的。。
sentinelK
2023-10-10 15:09:49 +08:00
关键要看这个“破解”的概念是什么。

1 、如果是接口仅限小程序调用,走云函数是最可行的。

2 、如果是对调用次数有限制,对提交信息逻辑有要求,完全可以从 openID 的控制入手。频次异常、操作逻辑异常直接把他 openID 封了。(微信小程序的 openID 逻辑是服务器端控制的,前端只提交 wx.login 获得的 code )

3 、如果是对提交的信息可信度有要求,那其实搞 IT 的应该都知道,web 提交的信息零信任。

总体来讲,就是把异常调用接口的成本提高,高过其收益。自然就不会有人恶意调用接口了。
haython
2023-10-10 15:15:32 +08:00
@iOCZ 你说这话,说明你没有价值呀
haython
2023-10-10 15:26:22 +08:00
@jadelike jwt 肯定不行的,因为这太容易绕过去了
jianyang
2023-10-10 15:46:50 +08:00
小程序约等于前端
要么你就付费混淆随便整个写个加密就行了
要么你就用类似 GRPC 的通讯协议、在前端有点偏冷门、逆向这玩意得靠经验猜
tool2d
2023-10-10 15:49:07 +08:00
还是服务器限制每一个 IP 的访问次数比较好,客户端限制比较有限。
jadelike
2023-10-10 16:25:17 +08:00
@haython jwt 你别明文啊,用非对称加密不行么,私钥在你自己手上你怕啥
lambdaq
2023-10-10 16:27:42 +08:00
@haython wasm 里面的算法根据 userid 动态生成。
AndyChina
2023-10-10 16:45:45 +08:00
@4ark 方法靠谱, 否则只能使用微信云函数, 或者加上用户请求次数限制也行
haython
2023-10-10 18:34:40 +08:00
@jadelike 我怀疑你没懂我要做什么,jwt 不管是加密还是不加密,肯定要下发给用户的,前端拿到直接再提交就行,根本不需要解密,我是要阻止有人在我的小程序之外恶意调用我的接口
haython
2023-10-10 18:37:26 +08:00
@lambdaq 这种情况下,我的理解是 wasm 就是一个类库,userid 还是要传递参数进去,别人按照我的方式同样调用就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/980603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX