Tools

Gitleaks: quét API key và secret trong code và lịch sử git

Tóm tắt

Gitleaks tìm API key, token, mật khẩu trong lịch sử git, thư mục và dữ liệu từ pipe. Chặn từ pre-commit, chạy lại trong CI. Khi lộ key thật, thu hồi và tạo lại key trước, dọn lịch sử sau.

Một API key bị commit nhầm lên GitHub có thể bị bot quét và lạm dụng rất nhanh, và xoá file ở commit sau không giải quyết được gì vì key vẫn nằm trong lịch sử git. Gitleaks là công cụ mã nguồn mở quét bí mật (secret): tìm API key, token, mật khẩu, private key trong code, trong toàn bộ lịch sử git, hoặc trong bất kỳ thư mục nào, dựa trên bộ quy tắc regex và độ ngẫu nhiên (entropy). Dùng được ở ba chỗ: máy dev trước khi commit, CI, và khi audit repo cũ.

Trang GitHub của gitleaks/gitleaks
Trang GitHub của gitleaks/gitleaks (ảnh chụp tháng 11/2026)

GitHub: https://github.com/gitleaks/gitleaks · khoảng 31 nghìn sao · Go · MIT

Cài đặt

brew install gitleaks
# Docker
docker run -v "$PWD":/path ghcr.io/gitleaks/gitleaks:latest git /path
# Hoặc tải binary trên trang Releases

Ba chế độ quét

LệnhQuét gìDùng khi
gitleaks gitToàn bộ lịch sử commit của repoAudit repo, trước khi public một repo private
gitleaks dirFile trong thư mục, không cần gitQuét thư mục cấu hình, artifact build
gitleaks stdinDữ liệu đưa vào từ pipeQuét log, output lệnh khác
gitleaks git -v                                   # quét lịch sử, in chi tiết từng phát hiện
gitleaks git --report-path gitleaks-report.json   # lưu báo cáo JSON
gitleaks dir ./config -v
cat app.log | gitleaks stdin

Mỗi phát hiện ghi rõ quy tắc khớp, file, dòng, commit, tác giả và một fingerprint định danh duy nhất. Lệnh trả mã thoát khác 0 khi tìm thấy secret, nên dùng trực tiếp để chặn CI được.

Chặn từ trước khi commit

Cách hiệu quả nhất là không để secret vào lịch sử. Dùng pre-commit:

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.30.1
    hooks:
      - id: gitleaks
pre-commit install
# Khi cần bỏ qua (ví dụ secret giả trong test):
SKIP=gitleaks git commit -m "..."

Xử lý báo động nhầm

  • Bỏ qua một dòng: thêm comment gitleaks:allow cuối dòng chứa giá trị giả.
  • Bỏ qua phát hiện cụ thể: chép fingerprint vào file .gitleaksignore.
  • Quy tắc riêng: tạo .gitleaks.toml để thêm quy tắc cho định dạng token nội bộ hoặc loại trừ đường dẫn (thư mục test fixture).
  • Repo cũ nhiều phát hiện: tạo báo cáo làm baseline rồi chạy với --baseline-path để chỉ báo phát hiện mới.

Khi đã lộ secret thật

  1. Thu hồi và tạo lại (rotate) key ngay. Đây là bước quan trọng nhất; coi như key đã bị lấy.
  2. Kiểm tra log sử dụng của dịch vụ xem key đã bị lạm dụng chưa.
  3. Sau đó mới tính chuyện xoá khỏi lịch sử git; việc viết lại lịch sử không giúp gì nếu key chưa bị thu hồi, vì bản sao và fork vẫn còn.

Lưu ý

  • Quét bằng regex và entropy nên có cả báo động nhầm lẫn bỏ sót; gitleaks là một lớp phòng thủ, không phải bảo đảm.
  • Theo README của gitleaks-action, repo thuộc tài khoản tổ chức (organization) cần biến GITLEAKS_LICENSE, xin tại gitleaks.io; tài khoản cá nhân thì không cần. Hoặc gọi CLI trực tiếp trong workflow.

Áp dụng thế nào?

  • Dev: Cài hook pre-commit gitleaks và giữ secret trong .env (đã ignore) hoặc trình quản lý secret, không bao giờ trong code.
  • Tech Lead: Chạy gitleaks git trên mọi repo hiện có một lần để biết tình trạng, rồi bật quét trong CI cho mọi PR.
  • PM: Đưa quy trình "lộ secret thì rotate ngay" vào runbook sự cố; chi phí một lần lộ key cloud có thể rất lớn.

Nguồn & tham khảo

  1. gitleaks/gitleaks — gitleaks (GitHub)