V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
black11black
V2EX  ›  问与答

每分钟允许尝试密码最大次数,的最佳实践是什么?

  •  
  •   black11black · 2020-10-19 07:19:19 +08:00 · 1580 次点击
    这是一个创建于 1256 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,想问问大家的服务都是如何实现不让人随便猜密码的。

    系统层面一般搞个 fail2ban 就很轻松解决防止暴力破解的问题了,一般部署 web 业务则要自己搞。我简单想了一下用过的方案有几种:

    1 、业务节点维护 IP 计数:优点是简单粗暴,缺点是节点有状态,我个人莫名其妙得了一种节点有状态就很不爽的病。

    2 、另外创建一个 redis 服务,各节点共同维护计数状态:优点很多,缺点是另外多开一个服务增加了系统复杂性,部署、维护起来感觉麻烦。

    3 、在 sql 里维护共同的计数状态:一般很难有网站不接关系型数据库的,所以这个可以利用已有服务算是优点。但是另一方面我想到的一个问题是,因为 sql 读写远慢于 redis,所以如果被恶意攻击 sql 压力会很容易吃满。比如一般 nginx 部署的时候可能限制比如单 IP 每分钟最大访问 300q,那如果遇到了坏东西,只需要几个 IP 就可以让 sql 读写产生明显迟滞,似乎也不太妥?

    ==============================

    好奇生产上的最佳实践是什么,有没有什么取巧的方式?

    7 条回复    2020-10-19 14:24:18 +08:00
    594duck
        1
    594duck  
       2020-10-19 07:28:20 +08:00
    API GW 的限流功能类似

    简单点就是把用户重试密码次数状态记在一个 Redis 类的内存数据库中,尝试一次+1,超过你的设计值就停了。
    594duck
        2
    594duck  
       2020-10-19 07:30:43 +08:00
    关于 2 的纠结,很奇怪,多一个 Redis 又不多什么,如果用云就用云服务。如果不用云,评估一下你的量,只要单机不过 32G 内存,随便搞,反正这个 Redis 重启也没关系,简单的狠。

    这种服务放数据库,其灾难性和图片校验码放数据库一样,人访问一多就拖死数据库了,不值 当。
    goodboy95
        3
    goodboy95  
       2020-10-19 09:19:47 +08:00
    都部署集群了还没上 redis 多多少少有点奇怪……
    loliordie
        4
    loliordie  
       2020-10-19 09:40:24 +08:00 via Android
    Redis 啊 设置个超时时间完事 想不到怎么维护麻烦了
    Wincer
        5
    Wincer  
       2020-10-19 09:42:34 +08:00 via Android
    我部门目前是放 redis,漏斗限流。key 可以使用 IP 或者登录用户名,错误超过 3 次之后触发验证码,直到登录成功之后才解除本账号的验证码。另外这个 Redis 并不会增加系统的复杂性,这个验证系统应该是无状态的,不需要持久化。
    leoskey
        6
    leoskey  
       2020-10-19 09:42:51 +08:00
    登录密码统一在登录系统所属验证,支付密码统一在支付密码所属系统验证。其它系统想要验证就把参数传给登录 /支付密码所属系统去验证
    vate32
        7
    vate32  
       2020-10-19 14:24:18 +08:00
    不知道前端页面能不能存这个计数,之前看某些网站页面显示密码输入次数达到上限,然后在手机上试还能输入,很惊奇,然后用电脑上开无痕浏览也可以🐶
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5205 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:39 · PVG 17:39 · LAX 02:39 · JFK 05:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.