为了防止在 Git 提交中包含敏感信息(如数据库密码),可以采取以下几种方法:
1. 使用 .gitignore
将包含敏感信息的文件添加到 .gitignore
文件中,这样 Git 就不会跟踪这些文件。例如,如果你的敏感信息存储在 config.json
文件中,你可以在 .gitignore
中添加:
config.json
2. 使用环境变量
将敏感信息存储在环境变量中,而不是直接在代码中。例如,在代码中读取环境变量:
import os
db_password = os.getenv('DB_PASSWORD')
在运行应用程序之前,设置环境变量:
export DB_PASSWORD="your_database_password"
3. 使用 Git 钩子(pre-commit 钩子)
可以编写一个 Git pre-commit 钩子,在每次提交之前检查提交内容中是否包含敏感信息。如果包含,则拒绝提交。
方法1:手动编写 pre-commit 钩子
首先,创建一个 pre-commit 钩子脚本:
#!/bin/sh
# 定义敏感信息模式
SENSITIVE_PATTERNS=("your_database_password" "another_sensitive_pattern")
# 获取已暂存的文件
STAGED_FILES=$(git diff --cached --name-only)
for FILE in $STAGED_FILES; do
for PATTERN in "${SENSITIVE_PATTERNS[@]}"; do
if git grep -q "$PATTERN" "$FILE"; then
echo "Error: Sensitive information found in $FILE"
exit 1
fi
done
done
exit 0
将这个脚本保存到 .git/hooks/pre-commit
文件中,并确保它具有可执行权限:
chmod +x .git/hooks/pre-commit
方法2:使用 pre-commit 工具 禁止已经提交的文件
- 安装 pre-commit
pip install pre-commit
或者
brew install pre-commit # mac
apt install pre-commit # linux
- 添加默认配置文件
pre-commit sample-config > .pre-commit-config.yaml
在项目根目录下生成文件 .pre-commit-config.yaml
,内容如下:
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- 配置 pre-commit 钩子:
在 .pre-commit-config.yaml
文件中添加一个自定义钩子来检查指定文件是否被修改。例如,假设你想保护文件 protected_file.txt
,可以这样配置:
repos:
- repo: local
hooks:
- id: protect-protected-file
name: Protect protected_file.txt
entry: bash protect-protected-file.sh
language: system
stages: [commit]
- 创建自定义钩子脚本
#!/bin/sh
# 要保护的文件列表
PROTECTED_FILES=(
"protected_file.txt"
)
# 检查是否有文件被修改
for FILE in "${PROTECTED_FILES[@]}"; do
if git diff --cached --name-only | grep -q "^$FILE$"; then
echo "Error: You are trying to modify $FILE, which is protected."
exit 1
fi
done
# 允许提交
exit 0
- 使脚本可执行:
chmod +x protect-protected-file.sh
- 安装 pre-commit 钩子:
pre-commit install
4. 使用工具(如 git-secrets)
git-secrets
是一个专门用于防止在 Git 仓库中提交敏感信息的工具。它可以在提交之前扫描提交内容,并阻止包含敏感信息的提交。
安装 git-secrets
对于 macOS
brew install git-secrets
对于 Linux
git clone https://github.com/awslabs/git-secrets.git
cd git-secrets
sudo make install
然后在你的 Git 仓库中初始化 git-secrets 并添加敏感信息模式:
cd your-repo
git secrets --install
git secrets --add 'your_database_password'
git secrets --add 'another_sensitive_pattern'
这样,每次提交时,git-secrets 都会扫描提交内容并阻止包含敏感信息的提交。
5. 使用 Secret Scanning 服务
一些代码托管平台(如 GitHub)提供了 Secret Scanning 服务,可以自动扫描仓库中的敏感信息,并在发现敏感信息时发出警告。
通过以上方法,可以有效防止在 Git 提交中包含敏感信息,保护你的代码库安全。