V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wongzigii
V2EX  ›  程序员

如何防止别人刷注册接口,求解决方案

  •  1
     
  •   Wongzigii ·
    wongzigii · 2016-09-10 15:31:08 +08:00 · 12632 次点击
    这是一个创建于 2978 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近发现有人在恶意刷我们的注册接口,发送了大量的短信验证码,注册设备都是 iOS ,但是诡异的是每个账号的 IDFA 都不一样。 Note :注册接口加了限制,同一个号码在一定时间内只能接受一个短信验证码。 有人知道是什么黑科技吗?

    37 条回复    2016-09-12 16:39:20 +08:00
    youyoumarco
        1
    youyoumarco  
       2016-09-10 15:35:38 +08:00
    大量的真机同时注册?
    zhicheng
        2
    zhicheng  
       2016-09-10 15:40:04 +08:00   ❤️ 1
    IDFA 不过是个字符串,每个帐号不一样哪里诡异了。防止滥用的方法,限 IP , 限号码,限全局数量。
    crab
        3
    crab  
       2016-09-10 15:52:27 +08:00   ❤️ 2
    被人直接当作短信攻击接口了吧。建议同号码 1 天只能 5 次短信。
    最好加上验证码限制 IP 限制。
    另外不管有没有发送成功都提示发送成功,别提示已经超过限制。
    UnisandK
        4
    UnisandK  
       2016-09-10 15:54:12 +08:00   ❤️ 1
    图形验证码
    ljbha007
        5
    ljbha007  
       2016-09-10 15:56:15 +08:00   ❤️ 1
    加图形验证码 还有限制 IP 发送频率
    overlords
        6
    overlords  
       2016-09-10 16:04:38 +08:00
    语言验证码
    Wongzigii
        7
    Wongzigii  
    OP
       2016-09-10 16:07:45 +08:00
    IDFA - This is unique for every device. It is reset in the following ways:

    1.User can reset it and disable it as well (Limit Ad Tracking). This is found in Settings>Privacy>Advertising.

    2.It is reset on OS re-install.

    上网找到一些可以 reset IDFA 的方法
    fyibmsd
        8
    fyibmsd  
       2016-09-10 16:11:14 +08:00
    付费注册 perfect
    zhicheng
        9
    zhicheng  
       2016-09-10 16:21:43 +08:00 via Android
    为什么要 reset ?难道你在服务器端会验证 IDFA 是否真实存在?
    Wongzigii
        10
    Wongzigii  
    OP
       2016-09-10 16:27:50 +08:00
    @zhicheng 只是做了一些渠道统计

    1. 刷子不可能是直接调用接口来刷,我们接口是 https, 且请求参数做了手脚。
    2. 每次手机号, IP , IDFA 都在变。
    3. 目前我能猜到的是刷子通过越狱手机脚本模拟 APP 操作。

    不知道谁做过类似操作或防范过类似攻击。
    liuzhedash
        11
    liuzhedash  
       2016-09-10 16:36:47 +08:00
    @Wongzigii https 和接口是否能刷并没有关系吧?参数的手脚具体指的是什么?
    aeshfawre
        12
    aeshfawre  
       2016-09-10 16:38:20 +08:00
    @Wongzigii https 接口对吧,数据应该没加密对吧。
    直接模拟发送 http 包给你,软件随机修改其中的参数就可以的。这种一般都不可能是模拟 app 操作,
    bao3
        13
    bao3  
       2016-09-10 16:40:14 +08:00 via Android
    跟楼主说一下,越狱后可以随便改。。。。。请一下广告跟踪就可以了。我是用越狱插件把所有的都伪造一次。哈哈原来还可以有这个功能。。。
    aeshfawre
        14
    aeshfawre  
       2016-09-10 16:52:47 +08:00
    从你的描述来看,个人觉得就是简单的 http 封包来刷。 python 代码 30 行差不多。
    ip 都在变:可能是利用 http 头的那个 x 开头的参数漏洞。另外一种就是买代理 ip 了,成本稍微高点就是。
    解决方式:直接加验证码,或者客户端那边数据加密的方式,服务端这边解密失败就标记这个请求。这个需要让客户端升级成你的新版本,不知道你的 app 能不能实现。

    其他的方法那就只能自己找了,他那边发送过来的 http 数据中,找出和正常用户有区别的东西来,找出来的异常账户做标记,不要让做脚本的人知道你发现了他,让他自己搞不明白你用了什么手段发现他。这些帐号以后可以删除,或者限制功能。
    nodeath
        15
    nodeath  
       2016-09-10 17:04:35 +08:00
    紧急上个验证码吧。楼主是 APP 注册接口被刷要根治得判断是否越狱、越狱的需要查看是否安装作弊软件,符合的干掉
    nodeath
        16
    nodeath  
       2016-09-10 17:04:57 +08:00
    @nodeath 少打了几个字,假如是 APP 注册接口被刷
    chuhemiao
        17
    chuhemiao  
       2016-09-10 17:34:15 +08:00
    加单个 ip 限制,加图形验证码。找运维把这个人 ip 先干掉
    cszchen
        18
    cszchen  
       2016-09-10 18:10:38 +08:00 via iPhone
    肯定不会是用手机刷呀,模拟个 http 请求,几块钱就能买一堆代理 ip 。解决办法就是要做人机判断,成本最低的就是图形验证码
    vus520
        19
    vus520  
       2016-09-10 18:53:22 +08:00
    难道验证码不是最好的方案吗?
    loading
        20
    loading  
       2016-09-10 18:59:14 +08:00
    嫁接 12306 的验证码,还能帮打码赚钱,多好。
    jekkihun
        21
    jekkihun  
       2016-09-10 19:08:07 +08:00
    @aeshfawre 请问 https 的 POST 请求是模拟不了吧? 我之前截取某个 iOS APP 的包时候, https 里面参数都是乱码。
    lemontv
        22
    lemontv  
       2016-09-10 19:15:24 +08:00
    @Wongzigii 我司有设备识别的产品,不知道有兴趣么?
    liuxu
        23
    liuxu  
       2016-09-10 20:14:52 +08:00
    我们公司也出过这情况,后来加了图形验证码就好多了
    xiaoqi
        24
    xiaoqi  
       2016-09-10 20:25:04 +08:00
    一般加极验验证就好啦,没有人那么无聊刷这个
    codehz
        25
    codehz  
       2016-09-10 20:57:40 +08:00
    @jekkihun 一般 HTTPS 的直接中间人攻击啊。。。就算用双向验证都有相关解决方案(大不了越狱提取一下客户端证书。。。)
    tabris17
        26
    tabris17  
       2016-09-10 21:42:06 +08:00
    人家用脚本刷的,你 IDFA 有啥用,不都可以伪造么
    aeshfawre
        27
    aeshfawre  
       2016-09-10 21:46:01 +08:00
    @jekkihun 能啊,你看到是乱码,是因为你没有用中间人技术。
    ykrl089
        28
    ykrl089  
       2016-09-10 22:17:35 +08:00 via iPhone
    加防 csrf ,如果码对不上直接挂断。
    ic3z
        29
    ic3z  
       2016-09-11 00:11:04 +08:00 via Android
    1.加验证码
    2.统计 ip ,限制次数
    jccg90
        30
    jccg90  
       2016-09-11 01:54:37 +08:00 via Android
    以前刷过美团大众之类的各种首单优惠,刷过滴滴 uber 新用户优惠,刷过积分墙。。。现在没有完美的验证设备的方法,通过设备信息限制没有用,要加上别的思路。。。
    hantsy
        31
    hantsy  
       2016-09-11 10:01:26 +08:00
    @ykrl089 CSRF 是最基本的吧。
    0x00
        32
    0x00  
       2016-09-11 12:45:05 +08:00
    一句话概括: 增加注册成本

    如:
    1. 上验证码, 图形, 滑动, 都可以, 推荐阿里云安全滑动验证码
    2. CPU POW, 请求接口前, 先让 CPU 回答一个问题, 这个问题解题过程需要 3 秒左右
    3. 付费注册, 或者先 OAuth 再注册
    0x00
        33
    0x00  
       2016-09-11 13:00:28 +08:00
    @jccg90
    别公开说这些哦, 金额较大的薅羊毛要追加刑事责任
    cjyang1128
        34
    cjyang1128  
       2016-09-11 14:01:36 +08:00
    目前的短信厂商不是都需要你提供验证码的吗
    jccg90
        35
    jccg90  
       2016-09-12 09:33:23 +08:00
    @0x00 哈。。。刷首单之类的不是为了赚钱,是为了研究反作弊,不好好研究的话,被刷一轮要损失好多钱。。。这种事就要用黑客思维来思考。。。就像之前有不少电商公司出过支付 0.01 充值几百块的 bug ,这种问题只要稍微专业点的,都应该在开发设计中考虑到
    galenzhao
        36
    galenzhao  
       2016-09-12 14:55:59 +08:00
    @0x00 哈哈哈 POW 是我能想到的最好的解决方式
    keinx
        37
    keinx  
       2016-09-12 16:39:20 +08:00
    访问接口的时候需要带上加密手机号、内容、时间的 token ,后端解密
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3377 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.