15
10
月
2026
把 .env、数据库密码、AccessKey 提交到了 GitHub——这是最常见的数据泄露,没有之一。公开仓库被爬虫秒级扫描,密钥一泄露,云资源被盗用、服务器被当矿机。这篇讲泄露原理、预防配置、泄露后的急救。
需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,建站和游戏服都能快速部署。
一、泄露是怎么发生的
| 场景 | 后果 |
|---|---|
.git 目录能通过 web 访问 | 攻击者下载整个仓库,含所有历史版本 |
.env/配置文件提交进仓库 | 数据库密码、API Key 全暴露 |
| 公网仓库没设私密 | 内部代码、密钥全网可见 |
| 前端 JS 里硬编码密钥 | 任何人看源码就能拿到 |
| 日志/备份文件在 web 目录 | www.zip、backup.sql 被直接下载 |
爬虫有多快:GitHub 公开仓库的密钥,平均几分钟内被自动扫描工具发现。存到上面再删掉也没用——fork、缓存、归档站都留了底。唯一有效的急救是:立刻吊销泄露的密钥。
二、预防:五道防线
2.1 .gitignore 从第一天就写好
# 环境配置(最重要)
.env
.env.*
!.env.example
config.local.php
# 备份和数据库
*.sql
*.zip
*.tar.gz
backup/
db/
# 密钥和证书
*.pem
*.key
id_rsa*
*.p12
# IDE 和系统垃圾
.idea/
.vscode/
.DS_Store
Thumbs.db
# 日志
*.log
logs/
# 依赖(node_modules 别提交,但 lock 文件要提交)
node_modules/
vendor/2.2 提交前自查
# 看暂存区有没有敏感文件
git status
# 搜敏感关键词(提交前跑一遍)
grep -rniE "password|secret|api[_-]?key|token|access[_-]?key" --include="*.php" --include="*.js" --include="*.py" --include="*.env*" . | grep -v node_modules
# 如果已经 add 了,撤出来
git reset HEAD .env2.3 密钥和代码分离
# 错误:配置文件写死在仓库里
DB_PASSWORD=123456
# 正确一:配置文件只提交模板,真配置不进仓库
# .env.example(进仓库):
DB_PASSWORD=your_password_here
# .env(不进仓库,gitignore 挡住):
# 正确二:用环境变量注入,CI/CD 里配 secret
export DB_PASSWORD=$(cat /run/secrets/db_pw)配置分离的完整做法见企业邮箱与邮件发送服务搭建里的 secret 管理一节。
2.4 Nginx 挡住 .git 和备份文件
# 拒绝访问隐藏文件和常见备份格式
location ~ /\.(?!well-known).* {
deny all;
access_log off;
return 404;
}
location ~* \.(sql|zip|tar|tar\.gz|bak|old|swp|log)$ {
deny all;
return 404;
}部署后第一件事:自己访问 http://你的域名/.git/config,返回 404 才算安全,返回文件内容就是裸奔。完整加固见网站常见漏洞与基础防护。
2.5 私密仓库 + 最小权限
- 内部项目一律 Private,别用 Public「顺便分享」
- 协作者按需邀请,离职立刻移除
- 开启仓库的 Secret Scanning(GitHub 自带,泄露密钥自动告警)
- 云平台 AccessKey 用子账号,按服务授权,别用主账号 Key
三、泄露后急救(已经 push 上去了)
时间就是金钱,按顺序做:
# 1. 吊销泄露的密钥(最重要!现在就做!)
# - 云 AccessKey:控制台禁用/删除
# - 数据库密码:ALTER USER ... IDENTIFIED BY '新密码'
# - API Token:各平台后台重置
# 别等清理完仓库再吊销,先断根
# 2. 仓库改私密(公开的立刻转 Private)
# 3. 从 Git 历史里抹除(仓库还要继续用的话)
git filter-branch --tree-filter 'rm -f .env' --prune-empty HEAD
# 或用 git-filter-repo(更快更安全,推荐)
pip install git-filter-repo
git filter-repo --path .env --invert-paths
# 4. 强推覆盖远程历史(协作者要重新 clone!)
git push origin --force --all
# 5. 检查云账单和访问日志,确认密钥被没用过
# 阿里云/腾讯云控制台看 AccessKey 调用记录如果仓库已经被 fork 过:历史里的密钥等于公开了,删仓库也没用——必须吊销密钥,这一步没有替代品。
数据库密码泄露后的处置,参考数据库安全加固;确认是否已被入侵,走服务器被入侵应急排查。
四、前端密钥的特殊风险
前端 JS 里的密钥等于公开:
// 错误:地图 API Key、推送 Key 写死在前端
const MAP_KEY = "AKIA........";
// 正确:能暴露的只有「设计上就可公开」的 Key
// - 地图 Key:配 HTTP Referer 白名单(只允许你的域名调用)
// - 推送 Key:用服务端代理转发,前端只碰自己的接口审查方法:浏览器 F12 → Sources,搜 key|token|secret,看有没有意外暴露的。
五、自查清单
- [ ]
.gitignore覆盖.env、*.sql、*.pem、*.log - [ ]
git log --all -- .env历史上没提交过敏感文件 - [ ] 线上访问
/.git/config返回 404 - [ ]
www.zip、backup.sql这类文件不在 web 目录 - [ ] 仓库全是 Private(公开的确认无敏感内容)
- [ ] 云平台用子账号 AccessKey,不用主账号
- [ ] GitHub 开启 Secret Scanning 告警
- [ ] 密钥每季度轮换一次
最后一条最容易被忽略:再严的防护也怕内部人员流动,定期轮换密钥是兜底。轮换和 vault 管理思路见数据泄露应急响应。
代码泄露的防线就五句话:gitignore 写全、提交前搜一遍、密钥代码分离、.git 目录挡死、泄露先吊销密钥。做到这五句,这类事故基本和你无缘。
需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,建站快速部署。延伸阅读:开源程序部署安全检查、服务器安全基线检查清单、数据泄露应急响应与合规。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]5. 已经点了?立刻改密码 + 全盘杀毒 + 检查账号异常登录已经中招的处置:改所有相关密码(从干净设备上改)、检查账号登录记录、通知同事防同一波钓鱼、有资金损失立刻报警并联系银行冻结。五、企业防护制度(管理员向)制度说明双人复核付款、改权限、删数据要第二人确认权限最小化新人只给必需权限,离职当天回收密钥轮换每季度换一次密码/API Key,见Git 仓库与代码泄露防范钓鱼演练每季度发模拟钓鱼邮件[...]
2026-10-15 回复
[...]run: docker run --rm aquasec/trivy image --exit-code 1 --severity CRITICAL ${{ secrets.REGISTRY_URL }}/blog/web:${{ steps.vars.outputs.VERSION }}仓库 Settings → Secrets 里配:REGISTRY_URL、REGISTRY_USER、REG[...]
2026-10-15 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复
[...]})五、下载与鉴权对象存储的读取分两种:模式用途配置公有读头像、商品图(谁都能看)桶/对象公有读 + CDN私有读用户身份证、合同、订单凭证私有桶 + 服务端签临时 URL私有文件的下载链接要服务端按需签发(带时效的预签名 URL),别图省事设成公有读——用户隐私文件公网可遍历是数据泄露的重灾区,处置流程见数据泄露应急响应与合规要点。六、运维清单[ ] 主账号密钥只在服务端环境变量,不进代码库(用[...]
2026-10-18 回复