先给结论。数据库泄露盘点里这 5 类入口,优先级不按「听起来吓不吓人」排,按「外面的人离它有多近」排。公网能直连的库排第一;弱口令和默认账号排第二;代码和配置里漏出去的连接串排第三;备份和导出文件裸放排第四;账号权限、人的管理放最后。顺序弄反了,你把内部的权限矩阵整得再细,门口那把锁没换,等于白干。

数据库泄露盘点,先按「可达性」排一遍
很多人一做这事就先想注入、先想 WAF,看着挺专业。但攻击者不是按教程顺序来的,他是从便宜的地方开始试——扫一遍端口,撞一下弱口令,翻一翻网站根目录有没有 dump.sql,成本几乎为零。注入要先把你的参数结构摸清楚,那是第二步甚至第三步的事。所以数据库泄露盘点的第一刀,应该切在「谁在没有任何前置条件的情况下,能直接摸到我的库」。这个思路捋顺了,后面几类的先后自己就浮出来了。
第一类:公网能直连的数据库端口
MySQL 的 3306、PostgreSQL 的 5432、MongoDB 的 27017、Redis 的 6379,这几个默认端口在网上被扫是日常,不是意外。云主机的安全组或者本机防火墙默认放不放行,各家的默认策略不一样,以控制台和服务商文档说明为准,别照抄别人的截图。麻烦的地方在于「临时开一下」——为了导数据、为了连 Navicat,把 0.0.0.0/0 整段放进去,导完忘了收,这个洞能躺半年。
自查不难。登到机器上敲 ss -lntp,看监听地址是 0.0.0.0 还是 127.0.0.1;只给本机应用用的,把 bind-address 收到 127.0.0.1,走 SSH 隧道或者内网跳板去连。Redis 记得开着 protected-mode,MongoDB 老版本默认不开认证这事当年坑了不少人,具体版本行为以官方文档为准。还有个常被跳过的:数据库和网站放在同一台机器上,网站被人拿了 webshell,库等于顺手送出去,隔离这件事比端口更值钱。
第二类:弱口令和默认账号,比漏洞常见得多
端口收干净了,接下来最容易出事的是账号。phpMyAdmin 挂在网站根目录、adminer.php 单个文件扔在 /db/ 下面、面板端口对着公网,这几样组合起来就是给人送门钥匙。密码呢,root/root、admin/123456、库名当账号名——不是笑话,我见过撑了两三年的测试库还是这套,因为「反正没人知道地址」。地址不是秘密,扫描器比你勤快。
这一类里还有个隐形坑:旧账号。人走了,账号还在,权限还是库级别的全权限。清查的时候别只看现在谁在用,把 mysql.user 或者对应的账号表拉出来,一行行问「这个是干什么的」。答不上来的,先停掉再说。
第三类:连接串漏在代码和配置文件里
这一类不会立刻被人打进来,但它把钥匙复印了一份放在门外。最常见的三种:.env 或者 config.php 被提交到公开仓库,历史记录里还能翻出来;连接串打包进了前端产物,浏览器一按 F12 就看得见;报错页开了 debug,SQL 语句连账号密码一起打到页面上。还有一种,phpinfo.php 忘了删,路径、版本、配置全在里面。
处理顺序上我的建议是先改密码再删文件,反过来做没意义——泄露过的东西就当它已经被人抄走了。历史提交里的密钥,删当前文件不等于清干净,仓库公开过的,直接换账号、换口令、换白名单,别犹豫。
第四类:备份和导出文件裸放在网站目录
这条在虚拟主机和共享空间上尤其常见,因为权限和目录结构不由你完全控制。网站根目录里躺着 backup.sql、dump_2024.zip、整站打包的 tar.gz,运维图方便,偏偏这些路径最好猜:/backup/、/bak/、/data/、/temp/。用浏览器地址栏拼几个常见名字,能弹出下载框,那你的库等于明码放在网上。
对象存储也一样。存备份的桶设成公共读,链接一被爬到搜索引擎里,后面就不用我说了。备份文件的正确姿势是:不放在网站目录、桶设私有、下载走临时签名链接、压缩包加个密码(别用网站同款口令)。
第五类:权限和人的口子,排最后但最磨人
放到最后不是不重要,是它没法一键搞定。账号权限过大,一个只读报表的账号给了 db_owner;开发和运维共用一套凭据,出了事查不到人;第三方服务商要连库,账号一直没回收;离职流程里漏了数据库这一环。这些都不是技术问题,是流程问题,但你真要做数据库泄露盘点,最后一定绕回到这。
共享环境还要多看一眼邻居。同一台物理机上跑的站点,只要有一个被人拿下、提了权,你的库也在射程内。选虚拟主机或者共享空间的时候,隔离机制、备份策略这些东西,问清楚比看参数表有用。
一个不太讲究但能落地的先后顺序
三天内能做的:安全组和防火墙按「只留必要来源」重收一遍;数据库账号口令全部换掉,默认账号删掉;面板、phpMyAdmin、adminer 这类入口要么关外网、要么加一层访问限制;把网站目录扫一遍 .sql、.zip、.tar.gz、.env、phpinfo.php。这三天的活做下来,暴露面能砍掉一大半。
三个月慢慢磨的:账号权限按最小化重划,一账号一用途;打开数据库的登录审计,至少知道谁在什么时候连过;备份改成加密加异地,定期做一次恢复演练——没演练过的备份,只能算心理安慰。别追求一步到位,能持续跑的烂流程,比一次性做得漂亮然后放着烂掉的方案强。
最后留三句提醒:别拿「我库小没人惦记」当理由,扫描器不挑大小;别把改密码当成收尾,它只是开始;真要出过事,先保日志再清现场,顺序反了 Friendly 的线索就没了。自查清单就按今天这五类走一遍,能答上「这一类我堵了没有」的,才算过关。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!