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

2020-10-19 07:19:19 +08:00
 black11black

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

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

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

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

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

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

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

1590 次点击
所在节点    问与答
7 条回复
594duck
2020-10-19 07:28:20 +08:00
API GW 的限流功能类似

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

这种服务放数据库,其灾难性和图片校验码放数据库一样,人访问一多就拖死数据库了,不值 当。
goodboy95
2020-10-19 09:19:47 +08:00
都部署集群了还没上 redis 多多少少有点奇怪……
loliordie
2020-10-19 09:40:24 +08:00
Redis 啊 设置个超时时间完事 想不到怎么维护麻烦了
Wincer
2020-10-19 09:42:34 +08:00
我部门目前是放 redis,漏斗限流。key 可以使用 IP 或者登录用户名,错误超过 3 次之后触发验证码,直到登录成功之后才解除本账号的验证码。另外这个 Redis 并不会增加系统的复杂性,这个验证系统应该是无状态的,不需要持久化。
leoskey
2020-10-19 09:42:51 +08:00
登录密码统一在登录系统所属验证,支付密码统一在支付密码所属系统验证。其它系统想要验证就把参数传给登录 /支付密码所属系统去验证
vate32
2020-10-19 14:24:18 +08:00
不知道前端页面能不能存这个计数,之前看某些网站页面显示密码输入次数达到上限,然后在手机上试还能输入,很惊奇,然后用电脑上开无痕浏览也可以🐶

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/716232

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX