ENID
← Kembali ke Catatan

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:

Output terminal gitleaks detect: 80 commit dipindai dalam 427 ms, tidak ada kebocoran

Referensi