求大佬给点思路,web api 接口怎么防止被恶意重复访问?

2020-11-24 14:10:29 +08:00
 twg

背景:

设计一个 http 接口,给客户端访问,但是这个接口会访问 redis 和 mysql,所以这个接口如果被别人知道,恶意攻击,可能会导致 redis 或 mysql 炸掉,所以有没有什么可行性的方案?

我的解决方法:

后端和前端约定一个 token,该接口是 post 方法请求,客户端每次请求都会在 form 中携带这个 token,后端通过比较这个 token,如果一致则执行业务代码,反之返回。因为 web 服务器前有一层 slb,ssl/tls 加在 slb 上,所以这样中间人应该获取不到这个 token 吧?

这样安全吗?比如说,攻击人能从 app 程序二进制获取 token?

或者还有没有别的方案?

5247 次点击
所在节点    信息安全
37 条回复
twg
2020-11-24 15:10:15 +08:00
@locoz 涨见识了
zhiguang
2020-11-24 15:12:01 +08:00
如果是私有接口弄个 ssl 双向认证
zjsxwc
2020-11-24 15:19:32 +08:00
每隔一段时间给你客户一个你的证书与私钥, 参考农行的 K 宝
meshell
2020-11-24 15:20:11 +08:00
app 签名方式 防不住大佬的。就像 #13 说得一样,加一些风控吧,验证码这些 增加破解难道 .
Macv1994
2020-11-24 15:31:23 +08:00
谷歌翻译的 secret 字段大佬都能给你破译出来 哈哈哈 不过现在好像没有用了
shellic
2020-11-24 15:37:13 +08:00
Nginx 可以限制请求频率
murmur
2020-11-24 15:40:35 +08:00
首先要注册,实名制使用接口,然后在注册鉴权这部分拦截,微信有 token 但是 token 也是人获取的可以查到是谁
gadsavesme
2020-11-24 16:14:15 +08:00
限流呗,如果是恶意攻击前端加密也不靠谱的。
AkideLiu
2020-11-24 16:50:04 +08:00
如果简简单单就能解决,那些做 cyber security 的早去开滴滴了
yscg
2020-11-24 16:54:32 +08:00
看看重放攻击的解决方案
polymerdg
2020-11-24 17:07:11 +08:00
对称加密签名
polymerdg
2020-11-24 17:07:31 +08:00
约定大于配置
tqrj
2020-11-24 17:12:01 +08:00
没有绝对的安全
如果是没有登录的接口:可以根据 IP 去限制并发量这是最简单的
然后就是前端 JS 生成 token 后端进行效验具体细节 自己研究 参考 国外 CloudFlare 俗称五秒 cdn 最开始几代很容易破解其实。目前第三代还是有一定难度 JS 有混淆 vm 加密之类的解密很耗精力
登录之后的接口:其实可以直接 redis 限制并发为 1 这样?再配合 nginx 完成一些基础的限制
上面都是我瞎想的没有实践经验
Koral
2020-11-24 18:16:24 +08:00
https://docs.konghq.com/hub/kong-inc/rate-limiting/
看下这个呢?不知道满不满足需求
LLaMA2
2020-11-25 00:06:09 +08:00
假定你的接口叫 api,GET 请求, 且传递的参数是 data=abc 。

为了防止恶意重放攻击,可以实现如下:

api?data=abc&time=时间戳&code=1000&hash=xxxx

其中 hash 规则是 md5(abc + 时间戳 + 干扰码)

时间戳和 time 的保持一致,为了后端做超时检测, 干扰码和 code=1000 存在对应关系。

即你有一张表,事先生成了一堆序号和干扰码,干扰码对应的序号只有你和 APP 知晓,保证不能泄漏(实际上坏人需要花时间破解)

你每次收到消息后按照同样的方法计算 hash 比较,发现 hash 比对不上,就说明数据被篡改,时间戳超时可能是重放。服务器就直接丢弃,返回错误给前端
aawei
2020-11-25 00:15:11 +08:00
验证码
twg
2020-11-25 10:18:45 +08:00
@ye4tar 感谢解答,我准备采取类似方法.

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

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

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

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

© 2021 V2EX