网站被恶意调用发送验证码接口,已经要疯了!!! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ifconfig
V2EX    程序员

网站被恶意调用发送验证码接口,已经要疯了!!!

  •  
  •   ifconfig 2016-02-19 12:19:21 +08:00 19900 次点击
    这是一个创建于 3525 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端有一个调用发送验证码的网页,估计被哪个别人有心的人恶意调用了,现在数据库不断在 insert 数据验证码的记录,有一个手机号多达 800 多次。目前已经限制每个手机号 5 分钟内只能发 5 条,但是对方换了策略,发了 N 多个手机号,天啊!求对策!

    第 1 条附言    2016-02-19 13:56:22 +08:00

    场景是这样的:有一个注册页面,需要输入手机号,然后会有个获取验证码,验证码正确才能注册。
    恶意攻击的人找到了发送验证码这个地址,如: send_msg.php ,然后恶意调用了 N 次, CSRF 应该不是针对这个问题的。

    解决办法想到 2 种:

    1.加验证码
    2.IP 地址限定
    60 条回复    2016-11-30 15:04:00 +08:00
    yinxingren
        1
    yinxingren  
       2016-02-19 12:21:19 +08:00 via iPhone
    验证码~
    lshero
        2
    lshero  
       2016-02-19 12:21:29 +08:00
    加图验
    htfy96
        3
    htfy96  
       2016-02-19 12:22:31 +08:00
    限制每个 ip 5 分钟只能发 5 条, 30 分钟只能发 10 条, 2 小时内只能发 15 条?
    wclebb
        4
    wclebb  
       2016-02-19 12:23:38 +08:00
    这是用来「呼死你」短信,为达到让对方手机无法正常使用通信的目的。
    wclebb
        5
    wclebb  
       2016-02-19 12:24:25 +08:00
    你不说你网站是干嘛的。。。
    feiyuanqiu
        6
    feiyuanqiu  
       2016-02-19 12:26:00 +08:00
    把验证码放 redis 或缓存里?
    bjrjk
        7
    bjrjk  
       2016-02-19 12:28:44 +08:00 via Android
    你限制每个 IP 每分钟只能发 1 条,不管是那个手机号都只能一条不就完了
    daniellu
        8
    daniellu  
       2016-02-19 12:31:25 +08:00
    CSRF 验证?
    lijinma
        9
    lijinma  
       2016-02-19 12:35:31 +08:00
    我也遇到过,几个方法:

    1. 最通用的方法,就是在前端加 验证码来限制。
    2. 限制 ip ,使用 fail2ban 来监控 nginx 日志,然后限制 ip


    建议你使用方法 1 ,不要图简单。
    500miles
        10
    500miles  
       2016-02-19 12:36:44 +08:00
    验证码被识别了? 还是压根儿没有图形验证码?
    jarlyyn
        11
    jarlyyn  
       2016-02-19 12:43:53 +08:00
    加验证

    401 页面加 cookie,nginx 判断 cookie 反代,定时修改。

    动态 js 生成验证码,类似 crsf 。

    之前客户遇到过,我能想到的办法就这些。
    jarlyyn
        12
    jarlyyn  
       2016-02-19 12:44:39 +08:00
    另外不要考虑限制 ip 和手机号码。

    带不带重复的。

    我怀疑是坐在应用程序里的,而非网站。
    firefox12
        13
    firefox12  
       2016-02-19 12:44:46 +08:00
    图形校验码啊
    skiplow
        14
    skiplow  
       2016-02-19 12:47:19 +08:00
    接口加个校验值呀!
    br00k
        15
    br00k  
       2016-02-19 13:02:11 +08:00
    放数据库作死么。。。上 redis ,加点限制就行了。随便玩。
    meijing0114
        16
    meijing0114  
       2016-02-19 13:34:54 +08:00
    首先校验请求有效性吧,相同的验证码可以重复提交?
    其次对 ip 限频,防止被恶意调用。
    再次这种数据不适合放在数据库吧,如果只是要统计一下的话。
    shiny
        17
    shiny  
       2016-02-19 13:37:34 +08:00
    好多人好像没 get 到点,发短信验证码是要钱的。
    mailunion
        18
    mailunion  
       2016-02-19 13:41:40 +08:00
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    你把短信验证这一步取消了不就行了!
    phpcxy
        19
    phpcxy  
       2016-02-19 13:44:29 +08:00
    我用云片,他那边已经限制了 30 分钟同一个手机号只能发两条
    TangMonk
        20
    TangMonk  
       2016-02-19 13:45:01 +08:00
    我也遇到过,加了 csrf token 就没事了,如果还不行那就加入图形验证码
    homfen
        21
    homfen  
       2016-02-19 13:58:26 +08:00 via iPhone
    加个验证码呀,输入验证码才会发送短信,估计被利用做短信轰炸了
    RangerWolf
        22
    RangerWolf  
       2016-02-19 14:00:03 +08:00
    目前我感觉你能做的有两个事情:
    1. IP 限制
    2. 修改 php 的名字~ 然后调用的代码相应的也修改
    coosir
        23
    coosir  
       2016-02-19 14:01:25 +08:00
    我们遇到的是各种不同的 IP 和不同的手机号,防不胜防
    有效的办法就是加图形验证码
    istark
        24
    istark  
       2016-02-19 14:03:51 +08:00
    短信轰炸机用了你们短信验证码,以前我看到有人先邮箱验证,收到邮件在短信验证,再限制一些其他的,这个虽然繁琐了,效果会好点。
    realpg
        25
    realpg  
    PRO
       2016-02-19 14:04:06 +08:00
    不带验证码就能发短信,你们这系统设计的人是 out of date 多久了……
    killerv
        26
    killerv  
       2016-02-19 15:11:50 +08:00
    加验证码是最合适的方法吧,个人觉得限制 ip 有可能会误杀。
    tonghuashuai
        27
    tonghuashuai  
       2016-02-19 15:15:23 +08:00
    图片验证码+频率验证策略基本可以解决这个问题
    zxgngl
        28
    zxgngl  
       2016-02-19 15:32:22 +08:00
    说句题外话,我觉得现在随便注册什么帐号就要验证并绑定手机号本身就是一个 bug 。
    skydiver
        29
    skydiver  
       2016-02-19 15:35:09 +08:00
    @zxgngl 这是一个 feature
    aprikyblue
        30
    aprikyblue  
       2016-02-19 15:42:38 +08:00
    先图形验证码过了才让发短信验证
    Raidal
        31
    Raidal  
       2016-02-19 15:49:04 +08:00
    先加图形验证码才允许发短信,这个策略很多短信服务商都有相关的安全提醒
    Light3
        32
    Light3  
       2016-02-19 15:51:49 +08:00
    - - 你的短信商 没有 一个小时就让发 3 个的限制吗
    Srar
        33
    Srar  
       2016-02-19 17:36:08 +08:00
    geetest
    pyshift
        34
    pyshift  
       2016-02-19 17:40:56 +08:00
    我很好奇,运营商居然没有屏蔽你。不知道用得哪家的服务,一般都会直接屏蔽拉黑你才对啊。图验和 IP 监控其实只是增加难度而已,图验一般立竿见影, IP 地址搞个代理你就傻眼了。
    wd0g
        35
    wd0g  
       2016-02-19 19:36:34 +08:00
    一般每个手机号,每天设置 3 次验证码就 OK 了
    cmxz
        36
    cmxz  
       2016-02-19 19:40:24 +08:00
    图片验证码
    sding
        37
    sding  
       2016-02-19 19:44:49 +08:00 via Android
    设计系统时没考虑到这种情况???加图验
    KevinChan
        38
    KevinChan  
       2016-02-19 19:46:30 +08:00 via iPhone
    那就用邮箱注册呗,手机验证码注册的除非必须,否则就不注册
    flyingnn
        39
    flyingnn  
       2016-02-19 20:01:08 +08:00 via Android
    京东,百度的注册是没有图片验证码的,是钱嗯,还是防御技术?
    lutla
        40
    lutla  
       2016-02-19 20:03:11 +08:00
    一看就是被 0gtx 那批人给利用了 233
    salmon5
        41
    salmon5  
       2016-02-19 20:22:28 +08:00
    加验证码,
    手机注册就手机注册呗,有些程序猿真是清高,有些场景就是需要手机验证码这种相对物理的安全验证方式。你破解我手机验证码试试?邮箱撞库安全系数没手机高。
    nightv2
        42
    nightv2  
       2016-02-19 22:23:37 +08:00 via Android
    同样好奇短信提供商没有屏蔽你么?
    jyu213
        43
    jyu213  
       2016-02-19 22:24:14 +08:00
    好好奇,为啥没有人提 360 的双向验证。。。
    tianice
        44
    tianice  
       2016-02-19 22:25:51 +08:00
    后台加上验证规则,像你之前的规则,超过规则后后台不发送验证码,前台还是提示发送成功,他摸不透你的规则就老实了,前台无论如何都要提示发送成功
    libook
        45
    libook  
       2016-02-19 22:33:54 +08:00
    1 阶段:验证码
    2 阶段:记录放在 Redis 缓存里
    3 阶段:缓存用 IP 做 Key
    4 阶段:反思一下自己得罪谁了

    通常 1 阶段就够了。
    gkiwi
        46
    gkiwi  
       2016-02-19 23:05:06 +08:00
    难道只有我考虑的是,要浪费我好多钱么。。。
    publicAdmin
        47
    publicAdmin  
       2016-02-19 23:07:21 +08:00
    建议:
    1.如果有安全厂商的联系渠道,建议通过其获取一份手机号码黑名单过滤文件
    (至于他们的数据来源,未知。猜测是通过某些策略判断为机器人操作后添加的)
    2.如果需要保持足够高的安全性,且用户普遍质量偏高,建议尝试语音验证码
    3.server 添加短信策略
    4.安利个传说的新型验证方式.`极验`
    弊端:
    会误杀部分,但对刷验证码应该有一定缓解。短信商没封你的接口也算是可以了。
    pabno
        48
    pabno  
       2016-02-19 23:16:44 +08:00
    图片验证应该就够了,如果做 IP 限制,挺多地方是一片区域共用一个 IP 的,例如广州这边的城中村。
    @zxgngl 估计是想要收集数据吧
    leilux
        49
    leilux  
       2016-02-19 23:19:21 +08:00
    如果是直接调用 send_msg.php 的加 csrf 可以解决
    如果是靠刷注册页面来发短信的可以加图形验证码

    总之 send_msg.php 这个需要有个类似 token 的参数来增加调用的代价
    tairan2006
        50
    tairan2006  
       2016-02-20 00:14:38 +08:00 via iPad
    加图形验证码,语音验证码,或者干脆让用户给你发短信。。
    体验依次下降
    bkmi
        51
    bkmi  
       2016-02-20 00:16:08 +08:00
    超过几次之后 图像验证码啊 这种强度,就算不是刷验证码 普通页面都应该封 ip 了吧
    incompatible
        52
    incompatible  
       2016-02-20 00:22:11 +08:00
    @br00k 楼主的问题并不在于用数据库还是 redis 。以及这点数据量用数据库怎么就作死了?
    pynix
        53
    pynix  
       2016-02-20 00:52:18 +08:00
    笑尿
    MrMario
        54
    MrMario  
       2016-02-20 08:46:56 +08:00
    可以试试阿里的滑动验证,就用户体验来说,还是可以的
    wbsdty331
        55
    wbsdty331  
       2016-02-20 11:32:29 +08:00
    让用户给你发短信 怎么样
    xlrtx
        56
    xlrtx  
       2016-02-20 11:32:37 +08:00
    sms 服务应该会有每天上限的, 我做过的一个是每天同一个手机 5 条, 再加上 captcha 和 ip 限制, 就不会有问题的
    tSQghkfhTtQt9mtd
        57
    tSQghkfhTtQt9mtd  
       2016-02-20 13:19:47 +08:00


    当然你用户如果不是都会翻墙那当我没说
    mrwangrj
        58
    mrwangrj  
       2016-02-20 15:10:50 +08:00
    h4rdy
        59
    h4rdy  
       2016-02-20 16:19:54 +08:00
    给 send_msg.php 传输 post 数据。
    number=1388888888&token=xxxxxx
    使用 token
    jlj224
        60
    jlj224  
       2016-11-30 15:04:00 +08:00
    我们用的 SUBMAIL 是有每日次数限制的。而且他们有个主动防御机制,但是有部分会被误杀 http://submail.cn/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3839 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 10:21 PVG 18:21 LAX 03:21 JFK 06:21
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86