Secrets such as API keys, database credentials, JWT tokens, and private certificates must never be committed into version control (Git, SVN, etc.). Once stored in a public or shared repository, these secrets can be leaked permanently even if later removed, leading to account takeover, database breaches, and privilege escalation.
Ensuring that no secrets exist in version control protects sensitive data and enforces proper use of environment variables or secret management systems (e.g., Vault, AWS Secrets Manager).
# Use git-secrets or trufflehog to detect exposed keys
git secrets --scan-history
trufflehog git file://. --since-commit=HEAD~50
# Expected: no matches for API keys, tokens, or passwords
# Inspect sensitive files
ls -l app/etc/env.php
ls -l .env
# Ensure these are ignored in .gitignore
.env, app/etc/env.php) to .gitignore.# In Git history
DB_PASSWORD="supersecret123"
STRIPE_API_KEY="sk_live_abc123"
# Secrets committed → FAIL
# .gitignore
.env
app/etc/env.php
# Secrets stored in Vault / ENV vars, not in Git → PASS