VISEN GROUP
Technology & Engineering

Lỡ tay đẩy nhầm API Key lên GitHub: 10 phút sinh tử để không nhận hóa đơn nghìn đô

September 29, 20264 min readUncategorized

Một buổi đêm muộn, bạn vừa code xong tính năng gọi AI hoặc gửi mail cho website, gõ vội git add ., git commit -m "fix bug" rồi git push origin main.

30 giây sau, bạn chợt khựng lại khi nhận ra: file .env chứa API Key OpenAI / AWS chưa được thêm vào .gitignore.

Nếu bạn nghĩ “kho lưu trữ của mình vắng tanh, làm gì có ai vào xem” thì bạn đã lầm to. Các con bot quét tự động của hacker chạy 24/7 trên toàn bộ luồng public commit của GitHub. Chúng chỉ mất trung bình từ 15 đến 45 giây để phát hiện ra chuỗi key đó, tạo hàng loạt máy ảo đào tiền ảo hoặc cào sạch hạn mức thẻ tín dụng của bạn.

Dưới đây là cẩm nang 4 bước khẩn cấp bạn phải thực hiện ngay lập tức để chặn đứng thiệt hại.

1. Điều đầu tiên: Đừng chỉ xóa file rồi commit đè lên!

Phản xạ sai lầm phổ biến nhất của lập trình viên là:

  1. Xóa dòng chứa API hoặc xóa file .env .
  2. Tạo commit mới: git commit -m "remove secret".
  3. Push lại lên GitHub

Cách này hoàn toàn vô tác dụng. Git lữu trữ toàn bộ lịch sử (commit history). Bất kỳ ai mở tab Commits trên giao diện web hoặc chạy lệnh git log -p đều có thể xem lại chính xác đoạn mã vừa bị bạn xóa ở commit trước đó.

2. Bước 1: Vô hiệu hóa (Revoke) khóa ngay tại trang dịch vụ

Trước khi đụng vào bàn phím gõ lệnh Git, hãy mở trình duyệt lên trước:

  • Đổi/Hủy khóa lập tức: Vào bảng điều khiển của nhà cung cấp dịch vụ (OpenAI, AWS, Stripe, Resend…), bấm Revoke hoặc Delete ngay lập tức chiếc chìa khóa cũ.
  • Tạo khóa mới: Sinh một chuỗi khóa mới và lưu tạm vào file cục bộ an toàn.

Nguyên tắc vàng: Một khi key đã xuất hiện trên internet dù chỉ 1 giây, hãy coi như nó đã bị lộ hoàn toàn. Đừng cố giữ lại chìa khóa cũ.

3. Bước 2: Tẩy sạch lịch sử commit bằng BFG Repo-Cleaner

Nếu bạn muốn xóa tận gốc dấu vết của file .env khỏi toàn bộ lịch sử repository mà không làm hỏng nhánh code hiện tại, công cụ nhanh nhất là bfg:

  1. Tải công cụ hoặc chạy trực tiếp bằng dòng lệnh:
# Xóa sạch toàn bộ file có tên .env trong toàn bộ lịch sử các commit cũ
bfg --delete-files .env my-repo.git
  • Nếu chỉ muốn xóa đoạn text chứa chuỗi bí mật mà vẫn giữ file:
    • Tạo file passwords.txt chứa đoạn key bị lộ.
    • Chạy lệnh:
bfg --replace-text passwords.txt my-repo.git
  • Dọn dẹp cache và cưỡng chế đẩy đè lên GitHub:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push origin --force --all

4. Bước 3: Đặt bẫy chặn từ máy cá nhân với Pre-commit Hook

Để sự việc không bao giờ lặp lại trong tương lai, hãy biến việc kiểm tra mã độc thành phản xạ tự động của máy tính thay vì dựa vào trí nhớ:

  • Sử dụng công cụ mã nguồn mở gitleaks hoặc trufflehog.
  • Cài đặt hook kiểm tra tự động trước mỗi lần bấm commit:
# Cài đặt qua Homebrew hoặc binary
brew install gitleaks

# Kích hoạt hook tự động chặn commit nếu phát hiện chuỗi secret
gitleaks protect --staged

Nếu bạn vô tình để sót một chuỗi token có định dạng sk-... hay AKIA..., Git sẽ lập tức từ chối lệnh commit và báo đỏ ngay tại terminal của bạn.

5. Bước 4: Thiết lập hạn mức chi tiêu (Hard Limit)

Hầu hết các dịch vụ đám mây và AI API đều cho phép bạn đặt giới hạn trần chi tiêu:

  • Đặt Usage Limit / Budget Alert ở mức ngân sách bạn có thể chịu đựng được (ví dụ: tối đa 20$ hoặc 50$/tháng).
  • Khi chạm ngưỡng, hệ thống sẽ tự động ngắt API thay vì để số dư âm hàng nghìn đô la rồi mới gửi email thông báo.

Trong thế giới phần mềm, sai sót là điều không thể tránh khỏi và ngay cả những kỹ sư kỳ cựu cũng từng ít nhất một lần đẩy nhầm dữ liệu nhạy cảm lên mạng. Điều phân biệt một hệ thống nghiệp dư với một quy trình chuyên nghiệp nằm ở tốc độ phản ứng sau sự cố và cơ chế phòng vệ nhiều lớp. Bằng cách ưu tiên thu hồi quyền truy cập trước, tẩy sạch lịch sử git đúng cách và kích hoạt các chốt chặn tự động ở máy phát triển, bạn sẽ luôn làm chủ tình hình trước khi những con bot ngoài kia kịp hành động.

Leave a Reply

Your email address will not be published. Required fields are marked *