|
某甲方网站被脱库,针对数据库备份文件就躺在根目录的网站文件 /backup.zip 里,连密码都没设。敏感这不是泄漏段子,是有防去年某招聘平台泄露数百万简历的真实起因——渗透测试人员只是猜了一下常见的备份文件名,就下载了整个生产库。护措 敏感文件泄漏的针对根源往往不是黑客技术多高明,而是网站文件服务器上躺着不该存在的文件。配置文件、敏感日志、泄漏备份包、有防临时调试脚本、护措.git目录,针对这些数字垃圾里藏着数据库口令、网站文件云密钥、敏感内部网络拓扑。我见过某金融公司把私钥放在 /.ssh/ 下,路径名都不改,扫描器一梭子就扫出来。 防护得从源头做减法。文件能不放服务器就别放,尤其是备份。数据库备份应该走独立的备份系统,使用对象存储或磁带库,服务器本地只保留最近一次增量,且目录必须随机化命名——比如 /data/.bak/x7q2m9,而不是 /backup2024。随机目录名加访问控制,成本极低,却能挡住绝大多数批量扫描。 Web服务器的静态文件目录要单独划区。很多团队把上传目录和代码目录混在一起,攻击者传个webshell上去,直接就能解析执行。正确做法是上传目录只读、禁脚本执行,Nginx里配 location ~* \.(php|jsp)$ { deny all; } 这类规则。同时,所有敏感文件扩展名(.sql、.env、.git、.log)都应在服务器层面直接返回403,而不是404——403能立刻暴露存在,但配合随机目录名反而成了诱饵,不如统一返回404让扫描器失去兴趣。 再说日志。应用日志里经常意外写入请求参数、令牌甚至明文密码。我处理过一起事故,开发为了排查问题在日志里打印了用户手机号和验证码,日志文件又被日志采集器同步到了公网可读的OSS桶。防护手段有两条腿:日志脱敏必须写进代码规范,关键字段用正则替换成 ***;日志存储位置要独立,权限设成600,且定期轮转清理。 最容易被忽视的是版本控制工具泄漏。很多程序员把项目推送到GitHub私有仓库,但忘了删本地的 .git 文件夹。攻击者拿到 .git 后可以直接用 git log 恢复全部历史版本,包括删掉的配置文件。防护很简单:部署时用编译产物或Docker镜像,别把源码目录整个拷上服务器;如果必须用源码运行,就加一条nginx规则拦截 /.git 路径。 主动检测比被动防御重要。用扫描器定期模拟攻击路径,常见工具有nessus、awvs,或者干脆自己写个脚本跑一遍常见敏感路径字典。频率建议每周一次,每次结果要人工复核——自动化扫描的误报率不低,但漏报更致命。 还有一层容易忽略的:第三方组件。某个用的前端库或者插件可能自带调试接口,暴露了内部路径。这类问题只能靠依赖清单管理和漏洞库比对,没有捷径。 最后说个反直觉的观察:防护做得越隐蔽,攻击者越会深挖。与其把所有文件都藏起来,不如在关键路径上放一个蜜罐文件——比如一个伪造的 config.php.bak,里面写个假数据库密码,后台记录谁下载了它,直接锁定扫描源IP。这招我用过几次,效果比防火墙都好,因为攻击者一旦下载了“成果”,就会放松警惕。 敏感文件泄漏的防护不是单点配置,而是从代码、部署、运维到监控的链条。每堵住一个窟窿,攻击者就得多绕一段路。而大多数情况下,他们只会挑软柿子捏——你只要把最明显的几个洞堵上,就已经赢过90%的同行了。 |