V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Ds97
V2EX  ›  程序员

验证短信码被盗刷怎么办

  •  
  •   Ds97 · 2022-04-06 09:37:36 +08:00 · 7704 次点击
    这是一个创建于 991 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.限制了一个号码一分钟之内只能发一次 2.一个号码一个小时最多 6 次 3.一个 ip 一天最多 10 次 4.阿里云的滑块验证 以上的这些验证都是生效的,但还是被刷了上万条,都是换不同号码,号码前面部分是固定的,后面几位数随机的,ip 也是换着来的,有成百上千个 ip ,阿里云的滑块验证也通过了,用机器是怎么滑动那个滑块的啊,一脸懵逼。请问这种情况该怎么防啊

    62 条回复    2022-04-08 14:52:55 +08:00
    hay313955795
        1
    hay313955795  
       2022-04-06 09:47:09 +08:00   ❤️ 5
    作为了程序员我之前就是这样让公司短信被盗刷将近 5000 块.
    后来我评估了一下我们网站可能日访问量就是个位数..所以我可耻的做了一个操作.
    每日短信发送达到一定的量之后关闭了短信通道.然后下发短信通知一下管理员,
    管理员手动检查这些数据是不是异常数据.如果是异常数据就继续关闭,如果不是的话,就重新打开短信通道,如此我们公司的短信就再也没有发生盗刷的情况了.
    wdy3334
        2
    wdy3334  
       2022-04-06 09:49:32 +08:00
    之前用过一个下载视频的软件,滑块是随机滑,因为有一定的容错,基本上滑 3 次就能蒙中
    jorneyr
        3
    jorneyr  
       2022-04-06 09:58:04 +08:00
    完全防止盗刷好像做不到,只能增加点难度。
    访问短信页面时生成 token ,请求端对 token 进行加密,后端解密判断 token 是否可用,再增加其他各种想到的方式增加点难度。
    chenuu
        4
    chenuu  
       2022-04-06 10:02:19 +08:00
    做过腾讯云的.腾讯的滑块验证很简单,后面的风控会变成 让点击正对你的蓝色三角形 这种会难些,大概可以在后台调整默认难度
    fumichael
        5
    fumichael  
       2022-04-06 10:02:19 +08:00
    @hay313955795 #1
    『每日短信发送达到一定的量之后关闭了短信通道』
    你好骚啊,学习了,是个思路
    LeegoYih
        6
    LeegoYih  
       2022-04-06 10:03:16 +08:00
    监控到异常情况时,把滑块验证切换到图形验证码,弄个复杂一点的验证码,基本上可以解决
    hay313955795
        7
    hay313955795  
       2022-04-06 10:03:52 +08:00
    @fumichael 这就是我司的人工 智能..
    Ds97
        8
    Ds97  
    OP
       2022-04-06 10:07:26 +08:00
    @hay313955795 这方法有点骚,但是不符合我们的需求,有过几次盗刷了,但是在假期,而且都是休息时间,通知管理员了也不能及时去检查异常,不能及时打开通道
    hay313955795
        9
    hay313955795  
       2022-04-06 10:08:43 +08:00
    @Ds97 通道会影响到业务吗?如果不会可以试试达到阀值后让通道冷却几分钟...
    o0
        10
    o0  
       2022-04-06 10:09:09 +08:00
    其实就是不断提高对方的成本就行了
    Kinnice
        11
    Kinnice  
       2022-04-06 10:09:23 +08:00
    使用更为复杂的验证手段(增加验证码难度,让用户主动发送验证码,动态修改路由 /校验参,发送请求 phone 字段加密(wasm))
    encro
        12
    encro  
       2022-04-06 10:09:28 +08:00
    下行变上行。
    手机验证变邮箱或第三方。
    再不行实名认证。
    daimubai
        13
    daimubai  
       2022-04-06 10:18:35 +08:00
    @hay313955795 学到了
    raycool
        14
    raycool  
       2022-04-06 10:19:37 +08:00
    这是被竞争对手恶意给刷了吧
    crab
        15
    crab  
       2022-04-06 10:19:56 +08:00
    随机号码应该就不是单利用接口了,明显是针对性弄你的。让用户主动发短信吧。
    Ds97
        16
    Ds97  
    OP
       2022-04-06 10:34:47 +08:00
    @jorneyr 这方法感觉还是不行,因为现在的请求都是通过操作我们 app 来请求的,而不是通过接口工具直接请求,因为只有通过 app 每个接口都会多加个几个签名的参数,这些验证也都通过了
    zwgf
        17
    zwgf  
       2022-04-06 10:35:43 +08:00
    用户输入手机号
    点击获取验证码
    弹出一个需要微信扫码的网页二维码,用户只需用微信扫这个二维码,然后点击发送验证码即可。
    这样你只需要判断一个微信用户一天最多发送几次即可。
    让盗刷的人,去大量注册微信号吧,把这个成本转嫁到腾讯。
    oneisall8955
        18
    oneisall8955  
       2022-04-06 10:44:28 +08:00
    马克,求一个解决方案,感觉这类问题不太好处理呢
    Ds97
        19
    Ds97  
    OP
       2022-04-06 11:07:04 +08:00
    @zwgf 感谢你的回答 ,但是不能满足我们需求,我们有很多国外用户
    Ds97
        20
    Ds97  
    OP
       2022-04-06 11:09:11 +08:00
    @hay313955795 会影响到注册,因为我们有做国外的业务,所以 24 小时都可能会有注册登录,也不能在半夜达到阈值后起来改吧 哈哈
    Carseason
        21
    Carseason  
       2022-04-06 11:13:43 +08:00 via Android
    判断验证码次数达到一定条件后就要行为验证码+图形验证码都通过才行呗
    Crump
        22
    Crump  
       2022-04-06 11:40:21 +08:00   ❤️ 1
    做为一个做短信的人给一下我们常为客户提供的解决方案吧
    1.图形码必须的
    2.分步注册:第一步必须先填写账户密码,下一步在获取验证
    3.注册页面验证跳转来源
    4.最重要的,token 作为唯一性,获取验证时带上 token 后端验证
    5.短信提供商设置日发送限额,防止账户造成损失(估算下自己每天大概的量,设置额度。坏处就是可能整个账户都暂停,当然每家短信商机制不一样)
    6.ip 黑名单库(需要长期积累,不过网上之前也好像看到过类似的恶意 ip 库)
    希望能帮到你
    tiedan
        23
    tiedan  
       2022-04-06 11:48:40 +08:00
    上 Google Recaptcha
    Crump
        24
    Crump  
       2022-04-06 11:54:03 +08:00
    @tiedan 没用的,看他说的 号码前面部分是固定的,后面几位数随机的。很明显获取验证接口让人抓包了,然后他的接口没做安全措施
    LeeReamond
        25
    LeeReamond  
       2022-04-06 11:54:19 +08:00
    感谢 LZ 发帖可以学习解决方案。业务上之前听说过最简单的方法是屏蔽境外 IP ,境内 IP 直接按损失数额报警送对方进橘子就行了。可惜 LZ 的业务有大量海外用户,这就比较难搞了。
    tiedan
        26
    tiedan  
       2022-04-06 11:56:43 +08:00
    @Crump Recaptcha 就是解决机刷问题呀,没 token 或者分数过高直接 fail 掉请求
    skiy
        27
    skiy  
       2022-04-06 11:57:05 +08:00 via iPhone
    可以参考腾讯公司的骚操作。让用户发指定内容的短信到指定号码,然后来验证。
    Chism
        28
    Chism  
       2022-04-06 12:21:04 +08:00
    1. 单个 IP 每日超过 5 条需要 captcha
    2. 整体总量每日超过 1000 条,所有人需要 captcha (这个根据实际用户量调整)
    我是这么做的
    Ds97
        29
    Ds97  
    OP
       2022-04-06 12:36:06 +08:00
    @Chism 我们是用阿里云的滑块验证,没有用自己写的图形验证,滑块验证通过了才发短信,而且是每次发送都要滑块验证,还是防不住,全都是换着 ip 来的
    Chism
        30
    Chism  
       2022-04-06 12:42:41 +08:00
    @Ds97 你试试其它难度更大的验证方式,滑块毕竟只是图片拼接而已,AI 应该很容易破解
    zpfhbyx
        31
    zpfhbyx  
       2022-04-06 12:45:29 +08:00
    加个 ip 来源限制呗.. 请求页面跟下发短信要求 ip 一致..
    ZE3kr
        32
    ZE3kr  
       2022-04-06 13:24:05 +08:00
    加几个 hCaptcha ,每通过一次验证码你都能挣钱,所以不亏。
    XiLingHost
        33
    XiLingHost  
       2022-04-06 13:41:02 +08:00
    干脆做 POW 验证吧,每次发短信就按主流显卡性能跑满 1 分钟的难度,然后发个公告说明一下
    Wdafff
        34
    Wdafff  
       2022-04-06 13:43:57 +08:00
    我们是超过业务量或触发风控,反向发送短信验证,类似微信那种
    Felldeadbird
        35
    Felldeadbird  
       2022-04-06 13:43:57 +08:00
    滑块验证不是被人研究过不少解决方案嘛?楼主要不试下楼上推荐的 Google Recaptcha 。被人盯上恶意刷短信的话,只能增加对方的调用接口成本。
    spinecho
        36
    spinecho  
       2022-04-06 13:49:08 +08:00
    @XiLingHost 你这思路好像前几天在别的贴子上看到过...
    XiLingHost
        37
    XiLingHost  
       2022-04-06 13:58:04 +08:00
    @spinecho 你说的是这个帖子吗
    /t/845089
    laozhoubuluo
        38
    laozhoubuluo  
       2022-04-06 14:08:13 +08:00
    1. APP 层面能做的很多啊。比如上报一些终端信息之类的做风控,大量重复的异常终端直接干掉。再比如用户行为分析的数据,进来直接点注册需要更严格的审核,比如需要先验证邮箱才行。如果上述太难也可以有一些暴力的缓解手段,比如注册账号之后才能发短信验证,短信的手机号码不支持修改等等。
    2. 即使不考虑这些,也可以做一些验证码策略。例如国内运营商普遍采用万号段进行治理,万号段内超过一定阈值比如 50 就会告警甚至拉黑所有来自这个万号段的短信。另外也可以针对地域设置策略,例如估计 +1 的注册用户一般每天不超过 500 ,那么一天发往这个群组的短信超过 1000 或者单小时触发 200 就直接停掉后续发送。
    3img
        39
    3img  
       2022-04-06 14:09:03 +08:00
    收集用户交互时的行为数据,键盘鼠标等,再搞个模型跑一跑真伪,前提条件是大量收集数据
    laozhoubuluo
        40
    laozhoubuluo  
       2022-04-06 14:10:10 +08:00
    @Wdafff 这种也可以,不过量不够的厂商应该是拿不到专用通道用来发反向上行短信的吧。
    shequ2046
        41
    shequ2046  
       2022-04-06 14:10:38 +08:00
    @ZE3kr 1000 次有多少美金?
    LeegoYih
        42
    LeegoYih  
       2022-04-06 14:32:01 +08:00
    滑动验证码很容易被破解的,结合图形验证码可解决。

    用 redis 的 zset 滑动窗口。
    1. 每成功发送一条验证码,用 zadd 加一条时间戳。
    2. 获取验证码前,判断缓存中是否存在图形验证码的标识,如果是,则返回图形验证码。
    3. 发送短信前,用 zcount 统计 x 分钟内发送次数,如果超过 ${interval_threshold} 阈值,redis 中新增 global_captcha_type=graphic ,设置超时时间 y 小时,y 小时后自动切换回滑动验证码。

    至于换 ip 也可以解决,使用 redis 的 bitmap 实现一个黑名单,发现一个让运维手动加进去,他总会用完的。
    Ds97
        43
    Ds97  
    OP
       2022-04-06 15:28:31 +08:00
    感谢各位大佬提供的思路,学习了,这次不一定用到,因为用什么技术是公司大佬决定,下次有类似的需求可以借鉴你们提供的这些思路
    spinecho
        44
    spinecho  
       2022-04-06 15:38:51 +08:00
    smarterq
        45
    smarterq  
       2022-04-06 16:35:48 +08:00 via Android
    注册时做好 kyc ( IP 地址和信息要对应之类的),鉴别一下代理 IP ,注册完毕登陆之后再进行短信验证的步骤,误封的走人工通道或者其他通道验证
    nothingistrue
        46
    nothingistrue  
       2022-04-06 17:36:18 +08:00
    @Ds97 #19 国外手机号上 Google Recaptcha 或者其他机器人识别,国内手机号用他说的微信那个方法。
    YouKnowIt
        47
    YouKnowIt  
       2022-04-06 18:06:20 +08:00
    lz 的公司规模多大,楼上很多层主都提供了不少好意见,但这些不是一个人能搞定的,你们现在有反作弊团队吗
    Ds97
        48
    Ds97  
    OP
       2022-04-06 18:06:44 +08:00
    @smarterq 业务需求不允许这样子做,注册就让用户填太多东西就直接吓跑用户了
    Ds97
        49
    Ds97  
    OP
       2022-04-06 18:14:55 +08:00
    @YouKnowIt 小公司 小团队,做不了那么多的
    smarterq
        50
    smarterq  
       2022-04-06 18:35:20 +08:00
    @Ds97 邮箱和地理位置这几样已经算是很基本的信息了吧,不行就研究一下怎么检测是否用的代理 IP
    shenqicai
        51
    shenqicai  
       2022-04-06 18:50:04 +08:00
    阿里不是有智能验证吗?
    ospider
        52
    ospider  
       2022-04-06 19:00:20 +08:00
    上 JA3 指纹吧,好多黑灰产还没卷到这一步
    Foxkeh
        53
    Foxkeh  
       2022-04-06 19:27:59 +08:00
    参考下微信换机后登录都是让用户发短信的,跟 @encro 提供的第一个思路一样
    ZC3746
        54
    ZC3746  
       2022-04-06 22:04:19 +08:00
    @hay313955795 简单粗暴有效
    cumt21g
        55
    cumt21g  
       2022-04-06 23:34:01 +08:00
    我的理解是别人蒙对了滑块验证,然后随便输入了个手机号,楼主的系统仍然向这个手机号发送了短信,导致扣钱,对么?
    morty0
        56
    morty0  
       2022-04-07 00:19:33 +08:00
    @XiLingHost 验证码挖矿
    XiaoBaiYa
        57
    XiaoBaiYa  
       2022-04-07 09:05:01 +08:00
    可以做几种验证码,提高验证难度
    zenxds
        58
    zenxds  
       2022-04-07 09:24:00 +08:00
    @Ds97 换一家验证码吧,阿里的不行
    NullData
        59
    NullData  
       2022-04-07 09:41:42 +08:00   ❤️ 1
    @spinecho 可能是在阮一峰的博客上看过他展示过的这个链接 https://git.sequentialread.com/forest/pow-captcha
    zwgf
        60
    zwgf  
       2022-04-07 11:03:36 +08:00
    @Ds97 #19 国外用户也没关系呀,twitter 或者 fb 、或者 google 授权登录一下再发送验证码,自己搞不定的转嫁给能搞定的公司。
    Ds97
        61
    Ds97  
    OP
       2022-04-07 11:32:22 +08:00
    @zenxds 控制台看到很多请求都被判断为风险和恶意请求了,但是拦截的数量不到十分之一吧
    vvjyun318
        62
    vvjyun318  
       2022-04-08 14:52:55 +08:00
    @Ds97 国内这运营商为了赚钱短信的收入也不放过,美国的短信都是不要钱,通过网络发延迟不到 1 秒
    @zwgf
    @NullData
    @Foxkeh
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1307 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:16 · PVG 01:16 · LAX 09:16 · JFK 12:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.