Gitleaks: Temukan Celah Sebelum Masuk ke main
Pendahuluan
Secret yang sudah di-push sudah cukup publik untuk menjadi masalah. Catatan ini memakai Gitleaks, pemindai secret berbasis Go, sebagai jaring pengaman singkat: temukan kredensial yang tertulis di riwayat, periksa staged changes secara lokal, lalu blokir push yang buruk di CI.
Panduan ini memakai rilis v8.30.1. Gitleaks kini feature-complete, jadi
perlakukan sebagai perkakas yang stabil, bukan platform untuk dibangun di
atasnya.
Instalasi
Homebrew
brew install gitleaks
Docker
Jalankan pindai tanpa menginstal apa pun:
docker pull ghcr.io/gitleaks/gitleaks:latest
docker run -v "$(pwd)":/path ghcr.io/gitleaks/gitleaks:latest git /path
Volume mount itu penting: container tidak bisa memindai riwayat yang tidak bisa dilihatnya.
Go
Repo-nya pindah, tetapi module path Go tidak berubah:
go install github.com/zricethezav/gitleaks/v8@v8.30.1
Penggunaan
Pindai riwayat commit
gitleaks git
gitleaks git -v path/to/repo
gitleaks git --redact
gitleaks git hanya membaca riwayat yang sudah di-commit. Ia tidak melihat
perubahan yang belum di-commit.
Pindai staged dan unstaged changes
gitleaks git --pre-commit --staged
--pre-commit melihat perubahan unstaged. --staged melihat staged changes.
Pakai keduanya sebelum commit.
Pindai direktori atau stdin
gitleaks dir -v ./some/path
cat config.yaml | gitleaks stdin
Buat laporan agar CI gagal
gitleaks git --report-format sarif --report-path results.sarif --redact
Exit 1 berarti ada kebocoran, sehingga langkah CI gagal tanpa skrip tambahan.
Cegah push yang buruk
Hook pre-commit lokal
Pakai framework pre-commit dan tambah berkas ini:
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.30.1
hooks:
- id: gitleaks
Lalu instal:
pre-commit install
Gerbang CI minimal
Baris terpenting adalah fetch-depth: 0; shallow clone hampir tidak
menyisakan riwayat untuk dipindai:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Scan for secrets
run: |
docker run -v "$PWD":/repo ghcr.io/gitleaks/gitleaks:latest \
git /repo --report-format sarif --report-path /repo/results.sarif --redact
Bukti
Jalannya nyata di salah satu repo saya — 80 commit dipindai dalam 427 ms, tidak ada kebocoran: