求防刷问题

2020-11-02 13:42:10 +08:00
 exceldream

搬砖遇到实际线上问题,诚恳咨询 v2 大神,

已知:

  1. 后端接口提供给前端 h5 调用

  2. 用户账号绑定到每一台手机设备上

  3. 用户登陆生成 token 算法目测已被攻破

求:

以下两种情况下,如何防止后端接口被刷?

Case A: 此接口要求用户登陆,因此可以抓到用户 uid,可以对此限制。但黑产手上似乎成千上万的设备和账号来刷。限制单个用户仿佛依然不起作用。

Case B: 用户不需要登陆,连用户 uid 都没有,直接刷下单接口,每天较正常流量,订单量翻了两倍多。观察过请求的 ip,也是不停地变换。

2796 次点击
所在节点    程序员
17 条回复
onfuns
2020-11-02 13:45:51 +08:00
动态图形验证码,破解也是要成本的。
linauror
2020-11-02 13:47:06 +08:00
加高刷的成本,比如必需验证手机号。
另外 token 算法怎么会被破?这玩意在服务端,而且还附带验证,想攻破很难吧
takemeaway
2020-11-02 14:31:32 +08:00
往 token 上想办法。
别说你,之前微信也遇到过。
微信支付之前是可以刷出交易记录的信息,后来改版了就不行了。
具体情况,你可以自己研究学学。
exceldream
2020-11-02 15:32:45 +08:00
@linauror 实际上是他们不停地换着手机号和账号来请求,显然不是人工的。验证手机号其实是在注册账号时做的,这个我们做了的。调用接口时,不可能再验证一遍。图形验证码对 CASE A 应该是可以做的,比如,同个用户在单位时间内请求频率超了给验证码。如果一刀切上验证码会很损用户体验。
exceldream
2020-11-02 15:33:26 +08:00
@takemeaway 如果有相关链接将不胜感激
renmu123
2020-11-02 16:30:28 +08:00
只有提高成本,让黑产承受不起不起,比如说:
1. 滑动或者各种奇形怪状的验证码
2. 请求重要借口的时候带上各种解密参数,加密方法也要经常变化,或者设置几套,每天随机换。
可以把加密的函数放在 jquery 之类的大众包中,迷惑视线。
可以找找爬虫高级技巧,反爬虫,反反爬虫的一些资料
Nillouise
2020-11-02 17:03:29 +08:00
好奇问一句,用户登陆生成 token 算法 是指什么?攻破又是什么意思?
yaphets666
2020-11-02 17:06:50 +08:00
下单接口 不带着 uid 直接返回 error 为啥不带 uid 也能调接口呢?
murmur
2020-11-02 17:07:57 +08:00
短信验证码配急验,没有验证码短信验证就会被拿来攻击别人
firefox12
2020-11-02 17:41:59 +08:00
token 不是和用户绑定的吗? 和刷新次数也可以绑定啊, 记录下刷新次数,次数一到马上进校验码 厉害的直接进个 3 重校验码, 让你解密 3 次才恢复。

你们不会只校验 token 正不正确,内部没有 token 对象吧
TsingChan
2020-11-02 20:20:40 +08:00
可以看看这个是否帮助: http://www.9ong.com/042019/web 人机验证的探索与实践.html

以前最好的就是短信验证码(下行),但现在黑产也很厉害了,腾讯在没有使用人机风控验证前,有个很有效的但不好的方法:发送短信到指定号码(上行)。

现在有人机验证,极验、阿里云、腾讯人机验证,但收费。

如果是使用图形验证的话,如大家说的,就是要增加破解的成本,让黑产得不偿失,传统图形验证码的方式加以改进下一定程度可以解决。适用于场景也比较广泛。

加密都是防君子的,小人黑产难防,只能不断的根据实际情况提高刷的成本,当黑产可以刷但不值得的时候,也是成功的。
xuanbg
2020-11-03 07:24:53 +08:00
@linauror 只要注册了用户,token 还不是随便拿。

防刷无非也就这么几种办法:
1 、限制请求的频率,譬如同一个用户同一个接口每 x 秒才能调用一次,没有用户的可以把用户换成手机的设备 id 等等
2 、加各种验证码,终极手段是短信验证码,还是用户发到一个固定号码的那种。来攻击呀,你要你肯花钱。
Cong99
2020-11-03 10:27:40 +08:00
有查被攻破原因吗?
Cong99
2020-11-03 10:28:59 +08:00
前端是不是没做 js 混淆,或者前端代码的注释有什么敏感信息之类的,可能泄露 token 算法的东西?
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 、收集鼠标点击、移动数据,异常则屏蔽。
locoz
2020-11-03 12:48:05 +08:00
如果你碰到的是专业黑产,那么你在技术层面所做的防刷就都是没意义的,因为黑产搞你的成本远比你想象的要低很多。

核心问题还是在于业务流程,只有通过结合业务流程来做风控才可以尽可能地防止被搞,像#1 和#6 说的各种验证码、#2 说的手机号验证、#6 说的加密参数弄几套随机换、#14 说的 JS 混淆以及#15 说的检测那些工具、增加无限 debugger 、多密钥和加密方式切换,现在都是基本操作了,随便就能破掉,毫无难度...而像#16 说的鼠标轨迹分析这种,一般人弄不来,即使弄了,没有结合业务流程也还是一样随便破。

#11 说的发送短信到指定号码(上行)这种方案是比较可取的,因为卡商、号商跟刷你们的并不是同一批人,刷你们的人并不一定能发短信出去,通常只是单纯的接码而已,所以能挡掉一大部分人。

结合业务流程的做法就是先暗搓搓地收集好各种信息,然后通过数据分析出没有任何日常操作的人。比较典型的例子就是美团外卖,如果你一直在搜索商品或食物,或是一天内长时间在进行操作,那么就会触发风控,因为正常人不可能一直在搜索或者长时间在外卖平台上进行操作,所以肯定是有问题的。
exceldream
2020-11-03 15:12:03 +08:00
@Cong99 这个不知道呢

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

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

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

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

© 2021 V2EX