搬砖遇到实际线上问题,诚恳咨询 v2 大神,
已知:
后端接口提供给前端 h5 调用
用户账号绑定到每一台手机设备上
用户登陆生成 token 算法目测已被攻破
求:
以下两种情况下,如何防止后端接口被刷?
Case A: 此接口要求用户登陆,因此可以抓到用户 uid,可以对此限制。但黑产手上似乎成千上万的设备和账号来刷。限制单个用户仿佛依然不起作用。
Case B: 用户不需要登陆,连用户 uid 都没有,直接刷下单接口,每天较正常流量,订单量翻了两倍多。观察过请求的 ip,也是不停地变换。
1
onfuns 2020-11-02 13:45:51 +08:00
动态图形验证码,破解也是要成本的。
|
2
linauror 2020-11-02 13:47:06 +08:00
加高刷的成本,比如必需验证手机号。
另外 token 算法怎么会被破?这玩意在服务端,而且还附带验证,想攻破很难吧 |
3
takemeaway 2020-11-02 14:31:32 +08:00
往 token 上想办法。
别说你,之前微信也遇到过。 微信支付之前是可以刷出交易记录的信息,后来改版了就不行了。 具体情况,你可以自己研究学学。 |
4
exceldream OP @linauror 实际上是他们不停地换着手机号和账号来请求,显然不是人工的。验证手机号其实是在注册账号时做的,这个我们做了的。调用接口时,不可能再验证一遍。图形验证码对 CASE A 应该是可以做的,比如,同个用户在单位时间内请求频率超了给验证码。如果一刀切上验证码会很损用户体验。
|
5
exceldream OP @takemeaway 如果有相关链接将不胜感激
|
6
renmu123 2020-11-02 16:30:28 +08:00 via Android
只有提高成本,让黑产承受不起不起,比如说:
1. 滑动或者各种奇形怪状的验证码 2. 请求重要借口的时候带上各种解密参数,加密方法也要经常变化,或者设置几套,每天随机换。 可以把加密的函数放在 jquery 之类的大众包中,迷惑视线。 可以找找爬虫高级技巧,反爬虫,反反爬虫的一些资料 |
7
Nillouise 2020-11-02 17:03:29 +08:00
好奇问一句,用户登陆生成 token 算法 是指什么?攻破又是什么意思?
|
8
yaphets666 2020-11-02 17:06:50 +08:00
下单接口 不带着 uid 直接返回 error 为啥不带 uid 也能调接口呢?
|
9
murmur 2020-11-02 17:07:57 +08:00
短信验证码配急验,没有验证码短信验证就会被拿来攻击别人
|
10
firefox12 2020-11-02 17:41:59 +08:00
token 不是和用户绑定的吗? 和刷新次数也可以绑定啊, 记录下刷新次数,次数一到马上进校验码 厉害的直接进个 3 重校验码, 让你解密 3 次才恢复。
你们不会只校验 token 正不正确,内部没有 token 对象吧 |
11
TsingChan 2020-11-02 20:20:40 +08:00
可以看看这个是否帮助: http://www.9ong.com/042019/web 人机验证的探索与实践.html
以前最好的就是短信验证码(下行),但现在黑产也很厉害了,腾讯在没有使用人机风控验证前,有个很有效的但不好的方法:发送短信到指定号码(上行)。 现在有人机验证,极验、阿里云、腾讯人机验证,但收费。 如果是使用图形验证的话,如大家说的,就是要增加破解的成本,让黑产得不偿失,传统图形验证码的方式加以改进下一定程度可以解决。适用于场景也比较广泛。 加密都是防君子的,小人黑产难防,只能不断的根据实际情况提高刷的成本,当黑产可以刷但不值得的时候,也是成功的。 |
12
xuanbg 2020-11-03 07:24:53 +08:00
@linauror 只要注册了用户,token 还不是随便拿。
防刷无非也就这么几种办法: 1 、限制请求的频率,譬如同一个用户同一个接口每 x 秒才能调用一次,没有用户的可以把用户换成手机的设备 id 等等 2 、加各种验证码,终极手段是短信验证码,还是用户发到一个固定号码的那种。来攻击呀,你要你肯花钱。 |
13
Cong99 2020-11-03 10:27:40 +08:00
有查被攻破原因吗?
|
14
Cong99 2020-11-03 10:28:59 +08:00
前端是不是没做 js 混淆,或者前端代码的注释有什么敏感信息之类的,可能泄露 token 算法的东西?
|
15
vone 2020-11-03 11:47:55 +08:00
前端上的混淆和加密只能提升他们的逆向的工作量,本质上不能解决问题。还有限流也是类似的情况,只要你的接口价值足够高,还是有人有能力能突破你的各种限制( IP 被封就买 IP,手机号被封就换手机号)。所以建议在混淆和限流的基础上,提高逆向成本和接口利用价值。
业务上: 1 、学拼多多,地址、收件人重复的砍单; 2 、学淘宝,登录时做最近购买商品验证;![image.png]( https://i.loli.net/2020/11/03/SCriGhI2lFfTcgW.png) 3 、发律师函; 4 、分析被刷的原因,降低接口价值。 技术上: 1 、请求中出现调试类信息直接封号,如 Headers 中的 “Postman-Token”、navigator.webdriver=true 、UserAgent 内出现特殊关键词; 2 、js 循环执行 debugger 指令,让逆向者无法使用 Chrome DevTools ; 3 、检测 Chrome DevTools 启动情况,频繁者封号(百度可以查到检测方法); 4 、请求体使用 RSA 算法加密,大促或者周期性更换密钥; 5 、核心功能做 A 、B 两个页面和两个接口加密方式,随机切换 A/B,如果出现请求数据和页面不一致的情况,就封号。 6 、收集鼠标点击、移动数据,异常则屏蔽。 |
16
locoz 2020-11-03 12:48:05 +08:00 1
如果你碰到的是专业黑产,那么你在技术层面所做的防刷就都是没意义的,因为黑产搞你的成本远比你想象的要低很多。
核心问题还是在于业务流程,只有通过结合业务流程来做风控才可以尽可能地防止被搞,像#1 和#6 说的各种验证码、#2 说的手机号验证、#6 说的加密参数弄几套随机换、#14 说的 JS 混淆以及#15 说的检测那些工具、增加无限 debugger 、多密钥和加密方式切换,现在都是基本操作了,随便就能破掉,毫无难度...而像#16 说的鼠标轨迹分析这种,一般人弄不来,即使弄了,没有结合业务流程也还是一样随便破。 #11 说的发送短信到指定号码(上行)这种方案是比较可取的,因为卡商、号商跟刷你们的并不是同一批人,刷你们的人并不一定能发短信出去,通常只是单纯的接码而已,所以能挡掉一大部分人。 结合业务流程的做法就是先暗搓搓地收集好各种信息,然后通过数据分析出没有任何日常操作的人。比较典型的例子就是美团外卖,如果你一直在搜索商品或食物,或是一天内长时间在进行操作,那么就会触发风控,因为正常人不可能一直在搜索或者长时间在外卖平台上进行操作,所以肯定是有问题的。 |
17
exceldream OP @Cong99 这个不知道呢
|