Nhiều người nói về AI coding như thể rủi ro sẽ rất lạ: agent tự thức tỉnh, model âm mưu, prompt injection kỳ bí. Những thứ đó có phần đáng quan tâm. Nhưng đa số bug làm app vibe-coded nguy hiểm lại rất cũ.

Broken access control. Tin dữ liệu từ frontend. Thiếu rate limit. Hardcoded fallback secret. OAuth state sai. WebSocket không check auth. API trả data không đúng owner.

AI không cần phát minh bug mới. Nó chỉ cần lặp lại bug cũ nhanh hơn, ở nhiều app hơn, bởi những người review ít hơn.

Happy path là nơi AI mạnh nhất

Khi bạn prompt:

Build a booking app with login, admin dashboard, and export.

Agent sẽ làm happy path rất nhanh:

  • Login form.
  • Booking list.
  • Create booking.
  • Admin table.
  • Export button.
  • Success toast.

Nhưng attacker không đi happy path. User thật cũng không luôn đi happy path. Họ đổi ID, refresh giữa flow, gọi API trực tiếp, spam form, dùng account khác, hoặc gửi data lạ.

Nếu prompt không nói rõ security behavior, agent thường tối ưu cho “demo chạy”.

Client-side trust là lỗi kinh điển

Một lỗi rất hay gặp: app tin frontend.

Ví dụ:

if user.role === "admin", show admin controls

Điều này tốt cho UX. Nhưng nếu backend vẫn chấp nhận request delete từ user thường, app hỏng.

Tương tự:

  • Game score gửi từ client, server tin luôn.
  • Discount tính ở frontend, checkout tin luôn.
  • Feature unlock nằm trong local storage.
  • Role nằm trong query param.
  • Tenant ID gửi từ client, API dùng luôn.

AI dễ viết kiểu này vì nó thấy app chạy. Nhưng security phải assume client có thể bị sửa.

Missing rate limit không thấy trong demo

Demo một người dùng không phát hiện rate limit. Login form có thể chạy ổn. Forgot password chạy ổn. Contact form chạy ổn.

Nhưng production cần hỏi:

  • Có rate limit login không?
  • Password reset có bị spam không?
  • API expensive có bị gọi liên tục không?
  • File upload có size limit không?
  • Search endpoint có bị brute force không?

Nếu agent không được yêu cầu, nó có thể không thêm. Nếu thêm middleware mà không mount vào route thật, summary vẫn nghe ổn nhưng app không được bảo vệ.

Fallback secret là quả mìn nhỏ

Một pattern rất xấu:

const JWT_SECRET = process.env.JWT_SECRET || "dev-secret";

Trong local demo, tiện. Trong production, nếu env thiếu, app vẫn chạy với secret yếu. Người dùng không biết. Agent có thể xem đó là “robust fallback”. Security xem đó là mìn.

Với secret, rule nên là:

If required env var is missing, fail startup visibly.
Do not create fallback secrets.

App fail sớm tốt hơn app chạy với secret giả.

WebSocket và background routes hay bị quên

Nhiều app kiểm auth cho REST API nhưng quên WebSocket, webhook, cron endpoint, admin export, hoặc debug route.

AI có thể thêm feature ở file mới mà không nối vào middleware cũ. Ví dụ dashboard API có auth, nhưng /api/export thì không. Chat REST có auth, nhưng socket channel thì không.

Review phải hỏi theo route, không hỏi chung:

List every route and whether it enforces auth, ownership, rate limit, and input validation.

Nếu agent chỉ nói “auth implemented”, chưa đủ.

Non-tech checklist

Bạn không cần làm security audit chuyên nghiệp để bắt nhiều lỗi cũ:

  1. Login sai password nhiều lần, có bị chặn hoặc chậm lại không?
  2. User B có đọc URL/data của user A không?
  3. Tắt env var bắt buộc, app fail hay dùng fallback?
  4. Đổi role trong local storage, quyền có tăng không?
  5. Gọi export/admin URL bằng user thường, có bị chặn không?
  6. Upload file rất lớn, app xử lý thế nào?
  7. Dữ liệu nhập vào có được validate ở server không?

Nếu app chạm user thật, đây là checklist tối thiểu, không phải polish.

Chốt lại

Rủi ro của vibe coding không chỉ nằm ở AI quá thông minh. Nó nằm ở việc AI rất nhanh tạo lại những lỗi web security nhàm chán mà ngành phần mềm đã biết từ lâu.

Đừng hỏi “AI có build được không?” Hãy hỏi: “Nó có lặp lại broken access control, client-side trust, missing rate limit, fallback secret không?”

Bug cũ ở tốc độ mới vẫn là bug. Và khi app được publish trong vài giờ, bạn cần gate cũ nhưng chạy sớm hơn: auth test, ownership test, rate limit, secret scan, route inventory, và dev review trước dữ liệu thật.

Tham khảo