网站登录如何防止撞库?

2019-01-09 16:34:36 +08:00
 fox0001
公司网站再次遭遇撞库。对方在圣诞节前一周,大约试了 200 万个 email 登录。估计以为会做圣诞节促销,流量暴增而会忽略其行为吧。由于登录错误的日志暴涨而被发现了。

对方用了一大堆 IP 来撞库,大概每秒 7 个请求,一个 IP 大约隔 10 秒访问一次登录请求。而且每个 IP 都是从首页开始访问,一定程度上模拟了用户行为。

目前网站登录错误后会要求输入图片验证码,但是该验证比较简单。虽然是个问题,但是再复杂的验证码也能破解。

那么除了加强验证码,还能如何防止撞库?
8044 次点击
所在节点    问与答
63 条回复
yksoft1ex
2019-01-09 16:49:47 +08:00
用户表里面加一个异常状态,错误登陆次数过多过频直接禁止登录,要求用户修改密码。
yksoft1ex
2019-01-09 16:53:53 +08:00
或者搞个 geoip 数据库,短时间 IP 的地理位置反复更改,按异常登录处理。
CallMeReznov
2019-01-09 16:57:58 +08:00
运维方面先用 nginx 之类的过滤功能按照规则过滤一部分,可以减少一部分不必要的后端压力
后端按照常规密码错误次数等方式屏蔽禁用账户,让客户修改密码
fox0001
2019-01-09 17:05:28 +08:00
@yksoft1ex #1 这个撞库是一个 IP 尝试多个 email 登录。估计对方有一堆账号密码,逐个来试。所以不能记录用户帐号的异常状态
fox0001
2019-01-09 17:07:42 +08:00
@CallMeReznov #3 这个撞库不是穷举,应该是拿着一大堆 email 和密码逐个试。要禁的话,只能禁止某 IP 一段时间不能登录
crab
2019-01-09 17:12:50 +08:00
@yksoft1ex HSBC 就是这种 2B 做法。错误 3 次账号锁了,要电话客服解。
fy
2019-01-09 17:18:17 +08:00
惩罚冷却怎么样,同一 IP,第一次错误 5s,30s 内第二次错误 10s,然后五六次以后增加到 30s,10 次 1min,15 次 30min,30 次 12h 以此类推
hlwjia
2019-01-09 17:18:31 +08:00
@crab 这一点都不 2B,当你是 HSBC 的时候你就知道了
crab
2019-01-09 17:30:57 +08:00
@hlwjia 这种除了麻烦客户再去经过电话客服解除还能什么作用?如果只是密码正确就能登陆为了资金安全能理解,问题是登陆过程还需要电子设备的保安编码,总不可能撞出密码还连这个两步验证的 6 位数字都撞出啊。
xkeyideal
2019-01-09 17:35:07 +08:00
本质上是个反爬虫
CallMeReznov
2019-01-09 18:16:20 +08:00
@fox0001 #5 所以我说让你在前面先规律掉一部分,一个 IP 内一分钟内有数次请求的直接 BAN 掉
可以按照防 CC 的方式进行
https://www.yunloc.com/167.html
mars0prince
2019-01-09 18:20:04 +08:00
参考微信和邮箱,换 IP 登录就要发手机验证码?
fox0001
2019-01-09 18:23:56 +08:00
@mars0prince #12 网站没要求用户录入手机号…
woyao
2019-01-09 18:24:24 +08:00
IP 信誉了解一下 :)
tanranran
2019-01-09 18:39:46 +08:00
加验证码,加 IP 拦截
d5
2019-01-09 19:14:41 +08:00
加一层安全宝或者 CloudFlare,或者改验证码成极验、Luosimao 之类的
d5
2019-01-09 19:18:35 +08:00
老接口切换成蜜罐,收集泄露的用户信息;
新增一个登陆接口,用户页面改动到新接口;
加一层 CloudFlare 或者安全宝;
换验证码到极验、Luosimao。

(事实上你随便改动一下登陆接口的路径位置、阴险地在字段加一个空格,就能让他冷却好一会儿,因为他的脚本就失效了。而空格让粗心的人防不胜防。)
aliipay
2019-01-09 19:22:58 +08:00
@hlwjia 账号泄露了呢? 这样只会给用户带来非常大麻烦吧
dapang1221
2019-01-09 19:27:50 +08:00
异常流量识别是个问题,如果对方是撞库的话,肯定会出现好多未注册用户尝试登陆的情况,这是一个点,可以从这标记异常的 ip。前端可以加浏览器指纹,例如分辨率什么的,对方不是会模拟访问别的页面吗,在别的页面把数据传上来,把指纹和 ip 对应上( github 上有个 fingerprint2.js 不错),如果一个指纹或 ip 多次尝试未注册用户的登录,那所有这个请求的登录成功请求,再强行验证或绑定一下手机号,这样也不会错杀
hilbertz
2019-01-09 19:32:37 +08:00
recaptcha

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

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

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

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

© 2021 V2EX