你的密码很少是被“猜”出来的,多数时候是被“搬”过来的。某个站被拖了库,那批账号密码流进黑产手里,没人会只盯着这一个站用,他们会拿到别处挨个试一遍。你在这边什么都没丢,密码却已经成了别人的钥匙,听着不讲理,可这就是撞库的日常。

撞库详解:密码是怎么从你手里跑到别人手里的
撞库详解这个词听着唬人,拆开就两件事:有货、开试。有货来自拖库,对方把某个站的用户表整个端走,能拿到哈希就拿哈希,运气好碰上没做处理的直接是明文;然后洗库,把格式统一的、能登录的挑出来打包成字典。开试才是撞库,拿这批字典去别的站批量提交登录请求。为什么能成?因为太多人图省事,论坛、邮箱、后台、网盘一个密码走天下,一次泄露就等于全网通杀。
密码存成什么样,决定拖库之后有多惨
顺带说一句存密码的事,这块很多小站做得相当随意。用 MD5 不加盐存密码,在彩虹表面前基本等于明文,一张表跑完几千万条常见密码;加个固定盐能好一点,但盐一泄露又是白搭。正经做法是 bcrypt、scrypt、argon2 这类慢哈希,每条记录独立加盐,算一次要几百毫秒,攻方的爆破成本立刻上去。这事跟撞库的关系在于:你存得越脆,流出去的那批货越好用,受害的不只是你自己的用户,还有他们在别处的账号,这笔账迟早绕回来。
为什么“试一万次中一次”就够本
有人觉得撞库命中率低,不必当回事,这想法挺危险。单次成功率确实不高,但黑产手里的字典动辄几十万上百万条,成本几乎为零——租个代理池、写个脚本就开跑。十个站成一个,一个站捞几十个账号,这买卖就成立。而且他们未必图你后台的删除权限:一个能正常登录的普通账号,往往就能看到手机号、地址、订单记录,转手一样有人收。
登录日志里,撞库留下的指纹
不用装什么高级设备,nginx 的 access.log 就够看一阵子。同一批 IP 在很短时间里登录大量不同账号,每条只试一两次;同一个账号的登录地来回跳;失败和成功交替出现;User-Agent 全站一模一样,一眼就是脚本;请求间隔均匀得不正常,人不会那样点鼠标。重点看 POST /login 的状态码分布,401 扎堆的那几个 IP,八成就是目标。面板类工具也能看登录日志,但字段少,真要分析还是原始日志靠谱。
验证码挡得住莽撞的,挡不住有耐心的
图形验证码能筛掉一大半粗暴脚本,这是投入最小的一步,值得做。但撞库不全是暴力流,慢速撞一天只试几百次,IP 换来换去,打码平台几块钱就能过。所以别把验证码当终点:失败次数按账号计、同一账号短时间多次失败就冷却、异地登录要求二次验证、密码一旦改过就让所有旧会话失效,这几条叠起来才算有防线。
封 IP 之前,先想想 NAT 后面那一大群人
看到某个 IP 撞得凶,手一抖就永久拉黑,这动作得悠着点。企业网、学校、运营商大内网,成千上万人共用一个出口地址,你一刀切下去,被误伤的用户只会觉得“这站坏了”,解释都没法解释。更稳的次序是:先按账号维度限流,失败多了就锁一段时间;再对 IP 做速率限制而不是永久封禁,慢慢加人机校验;真要封 IP,也限定在失败率高、而且这个 IP 压根没有成功登录记录的条件下。
站内能做的几件事,按性价比排一排
一是废掉弱口令,注册和改密时比对公开的弱口令字典,命中就直接拒绝;二是把最小长度往上抬,别只迷信大小写加符号那套复杂度规则;三是失败锁定配冷却,别让脚本无限重试。
四是重要后台强制二次验证;五是登录成功就发提醒,异地登录尤其要提醒。这几件里,二次验证性价比最高,锁定策略最好上线,弱口令拦截最容易被用户吐槽,可它恰恰最管用。
用户那边你管不了,但能推一把
密码复用这事你没法替用户改,但可以引导。注册页上就写明白“这个密码别再用在别处”;改密入口做得显眼点;检测到登录地突变时,别只发一封没人看的邮件,就在登录页弹一次确认。用户自己那边,最实在的建议是用密码管理器,一个站一个密码,记不住就让工具记,人脑要记住二十个不同的强密码,本来就不现实。
把话说回来,撞库防的不是聪明的小偷,是勤快的搬运工。要做的无非三层:别让密码轻易流出去,站本身别被拖库、备份和后台入口管住;流出去也登不进来,靠锁定、二次验证、异常提醒;万一真登进来了损失可控,靠权限分级和敏感操作二次确认。三层里空一层,另外两层都打折。下次翻日志,先看看那几个 401 扎堆的地址,心里大概就有数了。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!