Bảo mật và best practices với Git/GitHub
📚 Git & GitHub Series (Bài 15/15) — Bài cuối cùng. Sau khi tự động hóa với GitHub Actions ở Bài 14, ta khép lại series bằng chủ đề sống còn: bảo mật Git.
Bảo mật Git và GitHub là phần nhiều người mới bỏ qua — cho tới khi vô tình đẩy mật khẩu lên một repo công khai. Vì Git lưu toàn bộ lịch sử, một secret bị lộ không biến mất chỉ vì bạn xóa file ở commit sau. Bài cuối này tổng hợp các best practice quan trọng nhất để giữ an toàn cho code, tài khoản và cả nhóm của bạn.
Bảo mật Git: đừng bao giờ commit secret
Quy tắc số một: không commit thông tin nhạy cảm — mật khẩu, API key, token, file .env, private key. Theo hướng dẫn bảo mật của GitHub, một khi secret lên repo (nhất là public), hãy coi như nó đã bị lộ vĩnh viễn.
Tuyến phòng thủ đầu tiên là .gitignore (nhắc lại Bài 3):
.env
*.key
*.pem
secrets.json
config/local.*
Blog này cũng tuân thủ nghiêm: không hardcode secret trong repo hay workflow, mọi token đều qua GitHub Secrets như đã thấy ở Bài 14.
Khi lỡ tay đẩy secret lên — xử lý ngay
Nếu đã push một secret, hãy hành động theo thứ tự:
- Thu hồi/đổi ngay secret đó (đổi mật khẩu, revoke token). Đây là việc khẩn cấp nhất.
- Gột khỏi lịch sử bằng
git filter-repohoặc công cụ BFG Repo-Cleaner. - Force-push lịch sử đã làm sạch (cẩn trọng, phối hợp với cả nhóm).
- Bật secret scanning của GitHub để được cảnh báo tự động lần sau.
Nhớ rằng chỉ xóa file ở commit mới là không đủ — secret vẫn nằm trong các commit cũ.
Bảo vệ tài khoản GitHub
| Biện pháp | Vì sao |
|---|---|
| Bật 2FA | Chặn truy cập trái phép dù lộ mật khẩu |
| Dùng SSH key hoặc PAT phạm vi hẹp | Tránh dùng mật khẩu thô; giới hạn quyền |
| Đặt token hết hạn | Giảm rủi ro nếu token rò rỉ |
| Rà soát OAuth apps định kỳ | Thu hồi ứng dụng không còn dùng |
Personal Access Token nên cấp quyền tối thiểu cần thiết và đặt thời hạn — đừng tạo token "toàn quyền, không hết hạn".
Signed commit — chứng minh bạn là tác giả
Mặc định, ai cũng có thể đặt user.name/user.email trùng bạn và mạo danh. Ký commit bằng GPG hoặc SSH giải quyết điều này:
git config --global commit.gpgsign true
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
Commit đã ký hiển thị nhãn Verified trên GitHub, tăng độ tin cậy cho dự án.
Branch protection — chốt chặn ở cấp repo
Với nhánh quan trọng như main, bật branch protection trong Settings để:
- Bắt buộc Pull Request trước khi merge (nối tiếp Bài 9).
- Yêu cầu CI xanh trước khi gộp.
- Cấm force-push và xóa nhánh.
Đây là cách biến quy ước workflow thành luật được hệ thống cưỡng chế, tránh tai nạn ghi đè lịch sử.
Checklist best practices
- ✅ Thêm
.gitignorengay khi tạo dự án. - ✅ Không bao giờ commit
.env, key, token. - ✅ Bật 2FA và dùng SSH/PAT phạm vi hẹp.
- ✅ Viết commit message rõ ràng, commit nhỏ và thường xuyên.
- ✅ Mọi thay đổi qua nhánh + Pull Request, không push thẳng
main. - ✅ Bật branch protection và secret scanning cho repo quan trọng.
- ✅ Cấp token theo nguyên tắc quyền tối thiểu và đặt thời hạn hết hạn.
- ✅ Ký commit để có nhãn Verified với dự án cần độ tin cậy cao.
Tổng kết series Git & GitHub
Vậy là khép lại 15 bài: từ Git là gì, lệnh cơ bản, branch, merge, tới Pull Request, rebase và GitHub Actions. Bảo mật Git là mảnh ghép cuối, biến bạn từ người biết dùng Git thành người dùng Git an toàn và chuyên nghiệp. Chúc bạn commit vui và đừng quên: push thường xuyên, và đừng bao giờ commit mật khẩu!
Tham khảo & Nguồn dữ liệu
1. Liên kết bên ngoài được sử dụng trong bài viết
3. Bản quyền & Ghi nguồn
Một phần dữ liệu trong bài viết được tham khảo từ hướng dẫn bảo mật của GitHub. Mọi thương hiệu, tên sản phẩm và tài liệu gốc thuộc quyền sở hữu của chủ sở hữu tương ứng. Bài viết chỉ trích dẫn, tổng hợp và phân tích — không nhằm thay thế tài liệu chính thức.
Câu hỏi thường gặp
Lỡ commit file chứa mật khẩu lên GitHub thì sao?
.gitignore quan trọng thế nào với bảo mật?
Có nên ký (sign) commit không?
💬 BÌNH LUẬN
Đăng nhập GitHub để comment. Hỗ trợ markdown, reaction, reply.