0Pricing
Cyber Security Academy · 课时

机密扫描与硬编码凭据

使用 git-secrets、gitleaks 和提交前钩子,防止 API 密钥和密码被提交。

机密扫描与硬编码凭据 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

硬编码机密问题

开发者会意外地将 API 密钥、密码、私钥和令牌提交到源代码仓库。一旦进入 git 历史记录,即使删除也会持续存在。公共代码仓库在代码推送后的几秒内就会被机器人抓取。

被提交的内容

代码仓库中常见的机密包括:

  • AWS 访问密钥(AKIA...)
  • GitHub 个人访问令牌
  • 配置文件中的数据库密码
  • Stripe/支付 API 密钥
  • 私有 TLS/SSH 密钥
  • Slack webhook URL

用于预防的提交前钩子

从一开始就阻止机密进入 git:

# Install gitleaks as a pre-commit hook:
pip install pre-commit
# .pre-commit-config.yaml:
repos:
- repo: https://github.com/zricethezav/gitleaks
  rev: v8.18.1
  hooks:
  - id: gitleaks

扫描现有代码仓库

扫描现有 repos 中的机密:

# gitleaks: scan entire git history
gitleaks detect --source . --log-opts="--all"

# truffleHog: high-entropy string + regex detection
trufflehog git file://.

# GitHub secret scanning (automatic for public repos)
# Alerts under Security → Secret scanning alerts

GitHub 机密扫描

GitHub 会自动扫描公共代码仓库中的已知机密模式(AWS 密钥、GitHub 令牌等),并通知服务提供商。对于私有 repos,GitHub Advanced Security 可以扩展此功能。AWS 等服务提供商在检测到密钥后会自动撤销这些密钥。

.gitignore 方案及其局限性

将 .env 添加到 .gitignore 可以防止意外提交。但开发者仍可能将机密提交到其他文件中,而且如果文件已经提交,.gitignore 也无济于事。深度防御策略:gitignore + 提交前钩子 + CI 扫描。

使用环境变量

机密不应出现在代码中。请使用在运行时加载的环境变量:

# Python:
import os
api_key = os.environ["API_KEY"]

# Node.js with dotenv (for local dev only):
require("dotenv").config()
const apiKey = process.env.API_KEY

# Never commit .env to git

机密管理器

生产应用程序应使用专用的机密管理器:

  • AWS Secrets Manager — 自动轮换、由 IAM 控制访问权限
  • HashiCorp Vault — 开源、适用于企业、支持多种后端
  • Azure Key Vault / GCP Secret Manager

机密绝不应存放在代码中,也不应存放在磁盘上的环境变量中。

轮换已泄露的机密

如果机密已泄露:

  1. 立即撤销该机密(先于调查)
  2. 检查访问日志,查找未经授权的使用
  3. 生成新的机密
  4. 更新所有使用旧机密的系统
  5. 使用 git-filter-repo 或 BFG Repo Cleaner 从 git 历史记录中移除该机密

从 Git 历史记录中移除机密

撤销机密后,从历史记录中移除:

# BFG Repo Cleaner (faster than filter-branch):
java -jar bfg.jar --delete-files .env repo.git
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push --force
# Note: force push rewrites history - coordinate with team

CI/CD 流水线中的机密

CI/CD 系统有自己的机密管理机制:

  • GitHub Actions:机密存储在仓库/组织设置中 → 通过 ${{ secrets.API_KEY }} 访问
  • GitLab CI:CI/CD 变量
  • Jenkins:凭据插件

请在日志中屏蔽机密。切勿在调试输出中打印机密。

快速检查:机密扫描

防止机密进入代码仓库最有效的第一道防线是什么?

课程回顾

git 中的硬编码机密是重大风险,公共 repos 会在几秒内被机器人抓取。预防措施:提交前钩子(gitleaks)、gitignore。检测措施:truffleHog、GitHub 机密扫描。将机密存储在环境变量或专用机密管理器(Vault、AWS Secrets Manager)中。机密泄露后立即轮换,并使用 BFG Repo Cleaner 从 git 历史记录中移除。

常见问题解答

「机密扫描与硬编码凭据」课时是免费的吗?

是的 — 「机密扫描与硬编码凭据」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「机密扫描与硬编码凭据」这节课中我会学到什么?

使用 git-secrets、gitleaks 和提交前钩子,防止 API 密钥和密码被提交。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「机密扫描与硬编码凭据」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. CI/CD 流水线中的 SAST 与 DAST
  2. 软件组成分析(SCA)
  3. 机密扫描与硬编码凭据
  4. 安全倡导者与威胁建模
← 返回 Cyber Security Academy