Đừng commit bí mật: dùng .gitignore và biến môi trường đúng cách

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Một trong những sai lầm đau đầu nhất của người mới là vô tình commit khóa API, mật khẩu database hoặc token lên GitHub. Bots quét repo công khai liên tục, một khóa bị lộ có thể bị lợi dụng trong vài phút. Bài này hướng dẫn cách phòng tránh bằng .gitignore, file .env và các thói quen đúng.

Những thứ không bao giờ nên commit

  • Mật khẩu, khóa API, token truy cập, khóa riêng tư (private key, file .pem).
  • File cấu hình chứa thông tin kết nối thật như .env.
  • Thư mục phụ thuộc (node_modules/, vendor/) vì có thể tái tạo bằng lệnh cài đặt.
  • File build, cache, log (dist/, build/, *.log).
  • File riêng của IDE hoặc hệ điều hành (.idea/, .DS_Store, Thumbs.db).
  • Dữ liệu nhạy cảm của người dùng, bản sao lưu database.

.gitignore hoạt động thế nào?

File .gitignore ở thư mục gốc liệt kê các mẫu tên file Git sẽ bỏ qua. Ví dụ cho một dự án Node.js:

# Phụ thuộcnode_modules/# Biến môi trường và bí mật.env.env.local*.pem# Build và logdist/build/*.log# IDE và hệ điều hành.idea/.vscode/.DS_Store

Một số mẹo cú pháp: dấu / cuối chỉ thư mục, * khớp nhiều ký tự, ! đứng đầu để loại trừ (không bỏ qua), dòng bắt đầu bằng # là chú thích. Có thể lấy mẫu sẵn theo ngôn ngữ từ kho mẫu .gitignore trên GitHub rồi chỉnh theo dự án.

Lưu ý quan trọng: .gitignore không ảnh hưởng file đã commit

Nếu bạn đã lỡ commit file trước khi thêm vào .gitignore, Git vẫn tiếp tục theo dõi nó. Để ngừng theo dõi mà vẫn giữ file trên máy:

git rm --cached .envgit commit -m "Ngung theo doi file .env"

Nhưng lưu ý lịch sử cũ vẫn chứa nội dung file. Nếu đó là bí mật thật, xem phần xử lý sự cố phía dưới.

Dùng biến môi trường thay vì viết cứng

Thay vì viết khóa trực tiếp trong code:

// Tệ: bí mật nằm trong mã nguồnconst apiKey = 'sk_live_abcdef123456';

Hãy đọc từ biến môi trường:

// Tốtconst apiKey = process.env.PAYMENT_API_KEY;if (!apiKey) {throw new Error('Thiếu biến môi trường PAYMENT_API_KEY');}

Khi phát triển trên máy, thường lưu giá trị trong file .env (đã nằm trong .gitignore) và nạp bằng thư viện như dotenv (Node.js), python-dotenv (Python), hoặc tính năng có sẵn của framework (Laravel, Django, Next.js...). Trên server thật, đặt biến môi trường qua cấu hình hệ thống, dịch vụ cloud hoặc công cụ quản lý bí mật.

Cung cấp file mẫu .env.example

Đồng đội cần biết dự án cần những biến nào mà không cần giá trị thật. Hãy commit file .env.example:

DB_HOST=localhostDB_NAME=myappDB_USER=DB_PASSWORD=PAYMENT_API_KEY=

Người mới clone dự án chỉ việc sao chép thành .env và điền giá trị riêng. Kèm hướng dẫn trong README.

Công cụ giúp ngăn chặn từ sớm

  • Quét bí mật trước khi commit: các công cụ như gitleaks hay trufflehog có thể chạy dưới dạng pre-commit hook để chặn commit chứa khóa.
  • Tính năng quét của nền tảng: GitHub và GitLab có tính năng cảnh báo khi phát hiện token lộ trong repo.
  • Review diff: chạy git diff --staged và nhìn nhanh trước mỗi commit.
  • Tránh git add . bừa bãi khi chưa chắc trong thư mục có gì; thay bằng git add -p hoặc thêm từng file.

Nếu đã lỡ commit bí mật thì sao?

  1. Thu hồi ngay (rotate): tạo khóa mới và vô hiệu hóa khóa cũ tại nhà cung cấp. Đây là bước quan trọng nhất, vì dù xóa khỏi repo, khóa có thể đã bị sao chép.
  2. Xóa khỏi code và lịch sử: ngừng theo dõi file, cập nhật .gitignore. Để xóa khỏi toàn bộ lịch sử có thể dùng công cụ như git filter-repo hoặc BFG Repo-Cleaner, sau đó force push và báo cho đồng đội clone lại. Việc viết lại lịch sử cần phối hợp cẩn thận.
  3. Kiểm tra dấu hiệu bị lạm dụng: xem nhật ký truy cập, hóa đơn bất thường trên dịch vụ liên quan.
  4. Rút kinh nghiệm: thêm công cụ quét, cập nhật quy trình.

Kết luận

Quy tắc đơn giản: bí mật không bao giờ nằm trong mã nguồn. Hãy dùng .gitignore từ commit đầu tiên, lưu cấu hình riêng trong biến môi trường, chia sẻ file mẫu và thu hồi ngay khi lỡ lộ. Thói quen này bảo vệ cả dự án lẫn túi tiền của bạn.

Nếu muốn học về bảo mật cơ bản và triển khai ứng dụng đúng cách, hãy xem qua các khóa học tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment