前言
在版本控制系統提交 Secret(如 API Key、Password)可能帶來極大的安全風險。本篇文章將介紹如何利用基於 Python 的 pre-commit 工具,結合 Yelp/detect-secrets,來防止 Secret 被提交到 Git Repository。
pre-commit 與 detect-secrets 的功能概述
- pre-commit:管理和執行 Git hook 腳本,用於自動檢查程式碼品質與安全問題。
- detect-secrets:檢測程式碼中是否含有敏感資訊,並透過 baseline 檔案追蹤已知的 Secret,可以參考先前文章:使用 Yelp/detect-secrets 對程式碼進行敏感資訊與秘密掃描
安裝與設定 pre-commit
安裝 pre-commit
pip install pre-commit
確認安裝是否成功:
pre-commit --version
初始化 pre-commit
在專案的根目錄執行以下命令,初始化 pre-commit:
pre-commit install
此操作會自動在 .git/hooks/pre-commit
中設置對應的 Git hook。
設定 pre-commit 與 detect-secrets
編寫 .pre-commit-config.yaml
在專案根目錄新增 .pre-commit-config.yaml
,加入 detect-secrets 的配置:
repos:
- repo: https://github.com/Yelp/detect-secrets
rev: v1.5.0
hooks:
- id: detect-secrets
args: ['--baseline', '.secrets.baseline']
exclude: package.lock.json
安裝 hook
pre-commit install --install-hooks
產生 baseline 檔案
- 在專案根目錄執行以下命令,生成
.secrets.baseline
: - 將
.secrets.baseline
檔案加入版本控制:
detect-secrets scan > .secrets.baseline
git add .secrets.baseline
git commit -m "Add secrets baseline"
範例:防止敏感資訊的提交
範例 1:含有秘密資訊的程式碼
新增 test_secret.py
,內容如下:
# 含有敏感資訊的程式碼
API_KEY = "12345-SECRET-67890"
執行以下命令嘗試提交:
git add test_secret.py
git commit -m "Add test_secret.py"
預期結果
pre-commit
會觸發 detect-secrets 的檢測,並阻止提交,返回類似以下訊息:
[ERROR] detect-secrets-hook: Preventing commit due to detected secrets.
範例 2:排除特定秘密資訊
如果某些 Secret 經過審核,確定不需要阻止提交,可以將其加入 baseline。
- 請重新生成 .secrets.baseline
- 審查並更新
.secrets.baseline
: - 使用互動式介面標記 secret 為忽略
- 再次提交程式碼:
detect-secrets audit .secrets.baseline
git add .secrets.baseline
git commit -m "Add secrets baseline"
預期結果
提交成功,並且 detect-secrets 不會再次攔截這些已記錄的 Secret 。
日常維護建議
- 定期更新 baseline:每次新增或移除 Secret 後,執行以下命令更新 baseline:
detect-secrets scan --update .secrets.baseline
結論
透過 pre-commit 與 detect-secrets 的結合,可以高效地檢測並阻止敏感資訊的洩露。這不僅提升了專案的安全性,也讓團隊在敏感資訊管理上更加一致與高效。記得定期審查 baseline,確保其準確性與最新狀態!
0 留言