Một số report security gần đây đưa ra con số kiểu “gần một nửa AI-generated code có lỗi security”. Dễ dùng con số này để tạo panic. Cũng dễ dùng nó để dismiss toàn bộ AI coding.
Cả hai phản xạ đều lười.
Con số đó nên được dùng như một tín hiệu thiết kế workflow: nếu xác suất lỗi security không nhỏ, thì vibe coding cần gate trước khi chạm production. Không phải dừng vibe coding. Không phải tin mù. Đặt gate.
Prototype bar khác production bar
Một prototype local có thể chấp nhận nhiều thứ:
- Mock data.
- Fake auth.
- No deploy.
- No payment.
- No customer data.
- No public link.
Production không được như vậy.
Vì vậy câu hỏi không phải “AI code có bug không?” Code nào cũng có bug. Câu hỏi là:
App này đang ở bar nào?
Nếu chỉ là prototype để test idea, gate nhẹ. Nếu có user thật, data thật, tiền thật, public URL, gate phải nặng hơn.
Gate tối thiểu cho app có dữ liệu thật
Trước khi đưa vibe-coded app vào dữ liệu thật, cần ít nhất:
- Secret scan.
- Dependency scan.
- Build/lint pass.
- Auth and ownership manual test.
- No fallback mock data in production path.
- Environment separation.
- Error handling visible.
- Rollback path.
- Human diff review.
- Source trail for risky claims.
Không phải công ty nhỏ nào cũng có enterprise AppSec pipeline. Nhưng các gate này vẫn có phiên bản nhỏ.
Ví dụ secret scan có thể bắt đầu bằng git diff --cached và tool scan đơn giản. Auth test có thể bắt đầu bằng account A/account B. Rollback có thể bắt đầu bằng Git tag hoặc deploy history.
Security scan không thay thế review
SAST và dependency scan có ích. Nhưng chúng không bắt hết logic bug.
Scanner có thể bắt:
- Hardcoded secret.
- Dependency CVE.
- SQL injection pattern.
- Dangerous eval.
- Missing header.
Scanner khó bắt:
- User A đọc data user B.
- Payment state sai.
- Tenant boundary thiếu.
- Business rule ngược.
- Admin export public.
- Fallback data che API lỗi.
Vì vậy gate cần cả tool và behavior test.
Prompt để tạo security gate
Trước khi nhờ agent sửa, nhờ nó lập gate:
Create a production readiness checklist for this app.
Separate checks into:
- Automated command
- Manual browser test
- Code review item
- Platform configuration
- Out of scope for prototype
Do not change files yet.
Sau đó chọn từng check làm task nhỏ.
Khi agent chạy xong:
Report each checklist item as pass, fail, unknown, or not applicable.
Unknown is allowed. Do not guess.
Unknown tốt hơn claim sai.
Đừng để benchmark thành cái cớ không học
Một số người sẽ dùng số liệu security để nói: “Thấy chưa, AI code vô dụng.” Không đúng.
AI vẫn rất hữu ích cho:
- Prototype flow.
- Generate test cases.
- Explain unfamiliar code.
- Draft validation.
- Write scanner config.
- Create manual QA checklist.
- Compare diff against requirement.
Nhưng AI hữu ích nhất khi nằm trong workflow có gate. Không phải khi nó vừa build vừa tự certify sản phẩm.
Chốt lại
Nếu gần một nửa AI-generated code có khả năng fail security check, kết luận thực dụng không phải là hoảng. Kết luận là: đừng publish mà không có gate.
Vibe coding càng nhanh, gate càng phải sớm. Prototype thì dán nhãn prototype. Internal tool thì kiểm privacy. Production thì cần secret scan, dependency scan, auth test, ownership test, environment separation, rollback, và human review.
AI code không cần được tin ít hơn code người. Nó cần được verify như code người, với thêm một cảnh giác: người viết code có thể không thật sự hiểu code vừa được viết.