• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ifconfig
V2EX  ›  程序员

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

  •  
  •   ifconfig · Feb 19, 2016 · 21255 views
    This topic created in 3917 days ago, the information mentioned may be changed or developed.

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

    Supplement 1  ·  Feb 19, 2016

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

    解决办法想到 2 种:

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

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


    建议你使用方法 1 ,不要图简单。
    500miles
    500miles
    Feb 19, 2016
    10
    验证码被识别了? 还是压根儿没有图形验证码?
    jarlyyn
    jarlyyn
    Feb 19, 2016
    11
    加验证

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

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

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

    带不带重复的。

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

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

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


    当然你用户如果不是都会翻墙那当我没说
    h4rdy
    h4rdy
    Feb 20, 2016
    59
    给 send_msg.php 传输 post 数据。
    number=1388888888&token=xxxxxx
    使用 token
    jlj224
    jlj224
    Nov 30, 2016
    60
    我们用的 SUBMAIL 是有每日次数限制的。而且他们有个主动防御机制,但是有部分会被误杀 http://submail.cn/
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2492 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 142ms · UTC 04:35 · PVG 12:35 · LAX 20:35 · JFK 23:35
    ♥ Do have faith in what you're doing.