Bạn có từng tạo một prototype bằng AI trong vài giờ rồi muốn đưa ngay lên website thật không? Cảm giác đó rất dễ hiểu. Nhưng nếu prototype có form, login, API key, database hoặc webhook, câu hỏi tiếp theo phải là: đã kiểm tra bảo mật chưa?
Bảo mật vibe coding là cách đặt ranh giới cho code do AI tạo: dữ liệu nào được dùng, quyền nào được cấp, secret nằm ở đâu, ai review, test gì trước khi deploy. Mục tiêu không phải làm chậm team, mà là tránh biến một demo nhanh thành sự cố thật.

Tóm tắt nhanh
- Bảo mật khi vibe coding bắt đầu trước khi prompt: không đưa dữ liệu thật, secret hoặc quyền production vào prototype.
- Code AI tạo cần review input validation, auth, phân quyền, dependency, secret, logging và error handling.
- Nếu app dùng LLM runtime, cần chú ý prompt injection và insecure output handling theo OWASP LLM Top 10.
- Secret scanning và push protection giúp chặn API key trước khi vào repo, nhưng không thay thế review thủ công.
- Prototype chỉ nên lên production khi qua staging, test tối thiểu, rollback plan và owner kỹ thuật rõ ràng.
Bảo mật vibe coding là gì?
Đây là tập hợp guardrail để dùng AI viết prototype nhanh nhưng không vô tình mở lỗ hổng cho website, dữ liệu hoặc tài khoản thật. Nó gồm cả prompt, dữ liệu mẫu, review code, quyền truy cập, test và quy trình deploy.
Vibe coding phù hợp với thử ý tưởng, dashboard mẫu, form nội bộ và automation nhỏ. Nhưng khi code bắt đầu chạm CRM, thanh toán, dữ liệu khách hàng, đăng nhập hoặc webhook, prototype đã bước sang vùng rủi ro kỹ thuật.
Trong bài vibe coding cho doanh nghiệp, mình đã chia use case theo mức rủi ro. Bài này đi sâu hơn vào lớp bảo mật: không chỉ “AI viết được không?”, mà là “code này có được phép chạy với dữ liệu thật không?”.

Rủi ro thường gặp khi AI sinh code
Rủi ro lớn nhất không phải AI viết sai cú pháp, mà là code chạy được nhưng thiếu lớp kiểm soát. Một form có thể submit được, nhưng chưa validate input. Một dashboard có thể login được, nhưng phân quyền quá rộng.
Các lỗi thường gặp gồm:
- Input validation yếu: form nhận dữ liệu nhưng không kiểm tra độ dài, định dạng, enum hoặc ký tự nguy hiểm.
- Auth đơn giản quá mức: chỉ kiểm tra token ở frontend, thiếu session expiry hoặc thiếu role-based access.
- Error message lộ thông tin: trả stack trace, SQL error hoặc cấu trúc API cho người dùng.
- Dependency không kiểm soát: AI chọn package lạ, version cũ hoặc package không còn maintenance.
- Logging thiếu kiểm duyệt: ghi email, số điện thoại, token hoặc payload nhạy cảm vào log.
- Không có test regression: sửa một flow bằng AI làm hỏng flow khác mà team không biết.
OWASP Top 10 2026 vẫn là nền tảng tốt để kiểm tra các lớp web app như access control, injection, security misconfiguration và vulnerable components. Bạn có thể đọc thêm bài OWASP Top 10 2026 để có checklist rộng hơn cho website.
Secret và dữ liệu thật: khóa chặt từ đầu
Không đưa API key, token, file .env, service account hoặc dữ liệu khách hàng thật vào prompt và repo prototype. Đây là nguyên tắc nhỏ nhưng cứu được rất nhiều sự cố.
GitHub Push Protection được thiết kế để chặn hardcoded credentials trước khi chúng vào repository [2]. Secret scanning cũng có phạm vi và giới hạn riêng, ví dụ phụ thuộc loại token, pattern và cấu hình push protection [3]. Vì vậy, công cụ giúp giảm rủi ro, nhưng bạn vẫn phải thiết kế quy trình không tạo secret leak ngay từ đầu.
Checklist tối thiểu:
- Dùng dữ liệu mẫu hoặc dữ liệu đã ẩn danh cho prototype.
- Không paste API key thật vào prompt.
- Không commit
.env, private key hoặc token. - Bật secret scanning/push protection nếu dùng GitHub.
- Tách quyền dev, staging và production.
- Xoay token ngay nếu đã lỡ lộ.
Nếu sự cố đã xảy ra, xem thêm bài lỡ push .env lên Git để xử lý theo thứ tự rotate, revoke và dọn lịch sử.

Prompt injection và output handling
Nếu sản phẩm vibe coding có LLM runtime, bạn cần kiểm soát prompt injection và cách dùng output của mô hình. Đây là nhóm rủi ro riêng, khác với website form thông thường.
OWASP LLM Top 10 xếp prompt injection ở vị trí đầu tiên và nhấn mạnh insecure output handling có thể dẫn tới exploit downstream nếu output LLM được đưa vào lệnh, HTML, SQL hoặc API mà không validate [1].
Với ứng dụng có AI chat, agent hoặc text-to-action, hãy đặt rule:
- LLM không được tự gọi hành động có side effect nếu chưa qua allowlist.
- Output từ LLM phải được validate như input từ người dùng.
- Không để prompt chứa secret, connection string hoặc policy nội bộ nhạy cảm.
- Tool permission cần theo nguyên tắc quyền tối thiểu.
- Log phải đủ để audit nhưng không ghi dữ liệu nhạy cảm thô.
Bài bảo mật luồng xử lý LLM có thể dùng làm checklist riêng nếu prototype của bạn không chỉ là web app mà có agent hoặc workflow AI tự hành.

Checklist trước khi đưa lên website thật
Trước production, code vibe coding cần qua một cổng kiểm tra ngắn nhưng bắt buộc. Cổng này không cần quá nặng, nhưng phải bắt được lỗi phổ biến trước khi người dùng thật chạm vào.
| Lớp kiểm tra | Câu hỏi cần trả lời | Kết quả tối thiểu |
|---|---|---|
| Input | Form/API đã validate dữ liệu chưa? | Có schema, giới hạn độ dài, xử lý lỗi rõ |
| Auth | Ai được xem/sửa/xóa dữ liệu? | Có session, role, permission check ở backend |
| Secret | Token nằm ở đâu? | Không hardcode, dùng env/secret manager |
| Dependency | Package có rõ nguồn và còn maintenance? | Lockfile, audit, loại package lạ |
| Test | Flow chính có test hoặc smoke test? | Login, submit, error path, rollback pass |
| Deploy | Có staging và rollback chưa? | Không deploy thẳng từ prototype lên production |
OpenSSF Scorecard là một hướng tham khảo cho việc nhìn dependency và repo security theo nhiều tín hiệu như maintenance, branch protection, pinned dependencies và security policy [4]. Với SME, bạn không cần biến checklist thành bureaucracy, nhưng cần đủ bằng chứng để biết mình đang chấp nhận rủi ro nào.

Quy trình gọn cho doanh nghiệp nhỏ
Doanh nghiệp nhỏ không cần quy trình bảo mật cồng kềnh, nhưng cần một nhịp kiểm tra cố định. Mình khuyên dùng flow 6 bước: dữ liệu mẫu, repo riêng, secret scan, review kỹ thuật, staging, rồi mới production.
- Brief rõ ràng: ghi mục tiêu, user flow, dữ liệu được phép dùng và điều kiện không được làm.
- Dùng dữ liệu mẫu: không đưa CRM, khách hàng thật hoặc token thật vào prompt.
- Commit nhỏ: để review dễ hơn và rollback được.
- Review bảo mật: check auth, input, secret, dependency, error handling.
- Test trên staging: dùng key staging, dữ liệu giả, domain phụ.
- Quyết định build/kill: nếu prototype hữu ích, chuyển sang dự án kỹ thuật có owner; nếu không, xóa môi trường thử nghiệm.
Nếu bạn chưa có quy trình prototype, hãy đọc quy trình vibe coding 7 bước. Còn nếu đang lo bottleneck review, bài AI viết code nhanh hơn review sẽ giúp bạn đặt quality gate vừa đủ.
Kết luận
Làm nhanh không có nghĩa là bỏ qua bảo mật. Bạn vẫn có thể dùng AI để thử ý tưởng nhanh, miễn là prototype không được tự động nhận quyền production.
Nguyên tắc thực tế là: dùng dữ liệu mẫu, không lộ secret, review auth/input/dependency, test trên staging và có người chịu trách nhiệm trước khi deploy. Khi làm được như vậy, vibe coding trở thành công cụ thử nghiệm có kiểm soát thay vì một canh bạc kỹ thuật.
Nguồn tham khảo
- OWASP: Top 10 for Large Language Model Applications
- GitHub Docs: Push protection
- GitHub Docs: Secret scanning detection scope
- OpenSSF Scorecard
Các câu hỏi thường gặp
Bảo mật vibe coding nên bắt đầu từ đâu?
Bắt đầu từ dữ liệu mẫu, repo riêng, không dùng secret thật, sau đó review input, auth, dependency và deploy qua staging.
Code do AI tạo có an toàn không?
Không nên mặc định là an toàn. Code AI tạo cần review như code người viết: test, kiểm tra quyền, validate input, secret scan và dependency audit.
Có nên đưa dữ liệu thật vào prompt không?
Không nên, trừ khi có chính sách dữ liệu, consent, phân quyền và môi trường doanh nghiệp phù hợp. Với prototype, hãy dùng dữ liệu mẫu hoặc dữ liệu đã ẩn danh.
Secret scanning có đủ bảo vệ repo không?
Không đủ nếu đứng một mình. Secret scanning giúp phát hiện hoặc chặn token, nhưng team vẫn cần quy trình không hardcode secret, phân quyền đúng và xoay token khi lộ.
Prototype vibe coding khi nào được lên production?
Chỉ nên lên production khi có owner kỹ thuật, review bảo mật, test flow chính, staging, rollback plan và không dùng secret hoặc dữ liệu thật sai cách.
