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

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

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

7157 次点击
所在节点    程序员
85 条回复
lambdaq
2023-10-10 18:47:55 +08:00
@haython 同样的方式只能破解单一 userid 的接口 。。。

除非你的接口不跟 userid 相关,否则很容易发现单一用户的异常
jadelike
2023-10-10 19:03:04 +08:00
@haython ‘jwt 不管是加密还是不加密,肯定要下发给用户的,前端拿到直接再提交就行,根本不需要解密,我是要阻止有人在我的小程序之外恶意调用我的接口’
我怀疑你没看懂我说了什么,五分钟,一分钟,甚至你可以做一个特殊的 flag 让一串请求只能请一次,他是可以拿到,但你也可以判断这个请求是否被重放了,是否是一个小时前就应该来的请求
haython
2023-10-10 19:11:55 +08:00
@jadelike 我拿到了小程序源码,你一个 jwt 能阻挡我模拟你的请求吗
agostop
2023-10-10 21:48:45 +08:00
小兄弟,你是不是在找“防重放攻击”?顺着这个关键字搜搜吧
maocat
2023-10-10 23:05:58 +08:00
#14 @jianyang 之前我们前端搞过 grpc web ,妈的,自己人调试东西麻烦度上升了一个量级
ByZHkc3
2023-10-11 04:42:11 +08:00
@4ark @haython 我也是用这个来做验证,再套上个 AES,可以增加破解难度。如果你有朋友有公司资质的小程序开发账号,可以弄个私有化插件,可以完全杜绝 95%以上的脚本小子
summerLast
2023-10-11 09:08:06 +08:00
代码混淆+ 增加无用的代码呢?
xiaoriri666
2023-10-11 09:26:09 +08:00
核心功能直接调用云函数,90%没法破解,如果要破解只能走微信协议,或者 hook
KgM4gLtF0shViDH3
2023-10-11 09:30:53 +08:00
为什么说云开发太麻烦,我感觉除了贵和不能掌控在自己手里,还是很方便的啊。
ahhhhhh888
2023-10-11 10:33:24 +08:00
提供两个思路:
1 、在云函数中通过算法生成一个 code ,小程序每次请求服务端时都需要携带上这个 code ,服务端通过和云函数配套的算法进行解密,非法的 code 一律拒绝,这样可以可以防止在小程序外部调用 API 。
2 、在网关、应用 AOP 层面限制用户每秒的访问频率,防止爆刷。
ahhhhhh888
2023-10-11 10:40:04 +08:00
@ahhhhhh888 #30 code 中加上时间戳
haython
2023-10-11 10:49:54 +08:00
@agostop 不是防重放攻击
hantianyang
2023-10-11 11:43:19 +08:00
我已经拿小程序源码了,我直接用源码恶意调用接口,怎么防止恶意调用接口,是这个意思吗
layzh
2023-10-11 11:54:38 +08:00
貌似你们都没懂意思 他核心问题就是 服务端没法知道广告视频是不是真的播放了. 所以领取接口根本不是重放.他要防止的是 广告视频没播放 直接就走接口领取了奖励
haython
2023-10-11 12:02:15 +08:00
@hantianyang 对,怎么确保是在我的小程序发起的调用,而不是别人模拟的请求
jiayouzl
2023-10-11 12:19:37 +08:00
@jadelike 哈哈哈哈,你真是个人才!
jiayouzl
2023-10-11 12:20:52 +08:00
如果接口流量不大,就限制同请求次数,如果接口流量本身就大,那就时间戳加密,用自己的一套时间戳.
lyc8503
2023-10-11 12:25:18 +08:00
客户端执行的代码,除非依赖可信计算环境,否则不可能完全做到防止别人模拟

退而求其次的方法是,写个 js 签名算法,再加密混淆 js 后发布,提高别人逆向分析的成本

加密 js 的免费或收费方案 Google 即可,有很多
zero3412
2023-10-11 12:31:18 +08:00
小程序就是 HTML ,抓个包就把接口都暴出来了,可以考虑 RSA 非对称加密,有必要的话,OPENID 加个令牌桶
thinkershare
2023-10-11 12:42:27 +08:00
@haython 你要的是可信环境,而目前除了专门的硬件,手机这种东西,包括微信的客户端都不是可信环境,因此要做到你想要的功能是不现实的。只能提高破解者的门槛,如果利益足够,最终肯定还是防不住的,过度加强会导致成本上升,正常用户体验也会受限。电脑上播放的 DRM 加密视频就是一个典型的例子。

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

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

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

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

© 2021 V2EX