Mấy tuần gần đây mình thấy một pattern lặp lại khá nhiều: anh em build app rất nhanh bằng Cursor, GPT, Claude hoặc các coding agent khác, test thấy chạy ổn là muốn đưa thẳng lên production. Tốc độ này rất đã, nhưng cũng kéo theo một rủi ro khá thật: app chạy được không đồng nghĩa là app đủ an toàn để mở cho người dùng thật.
Từ một thảo luận đang hot trên r/vibecoding, mình thấy có một checklist rất đáng để biến thành thói quen trước mỗi lần launch. Không phải checklist kiểu enterprise nặng nề, mà là bộ rà soát tối thiểu để giảm những lỗi rất cơ bản nhưng rất đau nếu bị dính.
Vì sao vibe coding dễ đẩy anh em vào vùng rủi ro
Khi code được sinh quá nhanh, mình thường thấy 3 chuyện xảy ra cùng lúc:
- logic tính năng đi nhanh hơn phần kiểm soát bảo mật
- code chạy được nhưng chưa ai rà luồng dữ liệu thật kỹ
- AI hỗ trợ quá tốt nên anh em dễ tưởng những phần nền tảng đã được xử lý ổn
Vấn đề là production không thưởng cho tốc độ nếu đổi lại là rò dữ liệu, lộ API key hoặc endpoint sơ hở. Với app nhỏ, chỉ một lỗi kiểu này cũng đủ mất uy tín, mất tiền, hoặc mất luôn tài khoản dịch vụ bên thứ ba.
Checklist launch tối thiểu cho app vibe coding
1. Kiểm tra phần dữ liệu và trách nhiệm pháp lý trước
Nếu app có đăng nhập, lưu email, lưu nội dung người dùng nhập vào, lưu lịch sử thao tác hoặc bất kỳ dữ liệu cá nhân nào, thì từ lúc đó câu chuyện không còn chỉ là code nữa.
Anh em chưa cần biến dự án nhỏ thành một hệ thống compliance phức tạp, nhưng nên có tối thiểu:
- một trang privacy policy rõ ràng
- mô tả ngắn về dữ liệu nào đang được lưu
- biết dữ liệu đang nằm ở đâu: database nào, service nào, retention bao lâu
- tránh thu thập nhiều hơn mức thật sự cần dùng
Điểm quan trọng là: đừng đợi tới lúc có user thật rồi mới đi dò xem mình đang lưu cái gì.
2. Rà baseline security trước khi nói chuyện OWASP
Nhiều app mới launch vỡ ở những thứ rất cơ bản:
- thiếu security headers
- cấu hình CORS quá rộng
- cookie hoặc session chưa đặt flag an toàn
- route admin hoặc internal endpoint bị lộ
- môi trường dev và prod không tách bạch
Một bước nhanh mình thấy rất thực dụng là yêu cầu AI review theo vai trò cụ thể, ví dụ:
Review ứng dụng này như một security engineer. Kiểm tra security headers, cấu hình auth, cookie, CORS, secret management và các điểm có thể gây rủi ro ở production.
Prompt tốt không thay thế review thật, nhưng giúp bóc ra khá nhanh những lỗi nền mà team nhỏ hay bỏ sót.
3. Đối chiếu theo OWASP để bắt lỗi không hiển nhiên
Sau baseline, anh em nên có thêm một vòng review theo tư duy OWASP. Không cần làm đủ bài bản như audit chính thức, nhưng tối thiểu phải tự hỏi:
- có nguy cơ SQL injection hoặc query ghép chuỗi không
- input từ user có thể gây XSS không
- phân quyền đã kiểm tra ở server chưa
- auth flow có route nào bỏ lọt không
- upload file, webhook, callback có bị mở quá rộng không
Một prompt có ích là:
Review app này theo các nhóm rủi ro OWASP phổ biến. Chỉ ra lỗ hổng có thể xảy ra, mức độ ảnh hưởng và cách vá thực dụng nhất.
Điều mình thích ở cách này là nó kéo anh em ra khỏi tâm lý “app chạy rồi là ổn”, để nhìn app như một bề mặt tấn công.
4. Kiểm tra rò dữ liệu nhạy cảm
Đây là lỗi mình thấy cực hay xuất hiện trong code sinh bởi AI, nhất là khi anh em cho model sửa nhanh nhiều file một lúc.
Các điểm cần rà:
- file
.envhoặc biến môi trường có bị import sang frontend không - API response có trả dư thông tin nội bộ không
- log có ghi token, email, request body hoặc stack trace nhạy cảm không
- client có cache dữ liệu không nên cache không
- prompt hoặc context gửi sang model có vô tình chứa dữ liệu thật của user không
Checklist ngắn để tự hỏi trước khi launch:
- nếu mở DevTools lên, user có thấy secret nào không
- nếu xem network tab, response có field nội bộ nào thừa không
- nếu lỗi 500 xảy ra, màn hình hoặc log có lộ chi tiết hệ thống không
5. API key ở frontend là lỗi phải chặn ngay
Nếu API key nằm trong browser, gần như nên coi là đã bị lộ. Dù app còn ít user, việc này vẫn có thể dẫn đến:
- bị đốt quota hoặc phát sinh chi phí ngoài ý muốn
- bị người khác dùng key để gọi dịch vụ của anh em
- bị khóa tài khoản hoặc giới hạn vì lưu lượng bất thường
Cách xử lý an toàn hơn:
- chuyển lời gọi nhạy cảm về backend
- dùng proxy server-side
- giới hạn domain, IP, scope hoặc quota nếu nhà cung cấp hỗ trợ
- tách key theo môi trường thay vì dùng chung một key cho mọi thứ
Đây là một trong những lỗi đáng sửa ngay cả khi anh em đang cần launch gấp.
Một quy trình 15 phút trước khi bấm publish
Nếu muốn đơn giản hóa, mình gợi ý một vòng rà cực ngắn như sau:
- liệt kê tất cả dữ liệu app đang thu thập
- tìm toàn bộ nơi đang đọc biến môi trường và secret
- kiểm tra các route auth, admin, webhook, upload
- review response của 5 API quan trọng nhất
- chạy một vòng prompt audit bảo mật với AI
- tự đọc lại phần log/error handling như một người tấn công
Chỉ cần làm đều 6 bước này, chất lượng launch đã khác khá nhiều so với việc “chạy được thì lên”.
Góc nhìn thực tế cho anh em làm solo hoặc team nhỏ
Mình không nghĩ vibe coding làm mọi thứ nguy hiểm hơn theo kiểu bản chất xấu. Ngược lại, nó giúp nhiều người build được sản phẩm thật nhanh hơn. Nhưng chính vì chi phí xây quá thấp, anh em lại càng cần một thói quen mới: mỗi lần tăng tốc build thì phải có một nhịp giảm tốc để rà an toàn.
Tin tốt là phần lớn lỗi đầu đời của app vibe coding không phải lỗi quá cao siêu. Nó thường là lỗi nền tảng, và sửa được khá nhanh nếu phát hiện trước lúc có user thật.
Kết luận
Nếu anh em đang chuẩn bị launch một app làm bằng vibe coding, đừng chỉ hỏi “nó chạy chưa”. Hãy thêm một câu nữa: “nó có đang để lộ thứ gì không”.
Một checklist bảo mật tối thiểu, một vòng review theo OWASP và một lần rà secret hoặc dữ liệu nhạy cảm có thể không làm app hấp dẫn hơn ngay lập tức, nhưng nó giúp anh em tránh những cú ngã rất không đáng sau ngày launch.
Trong giai đoạn vibe coding phát triển quá nhanh như hiện tại, đây vừa là chia sẻ kinh nghiệm, vừa là một lời nhắc mang tính tin tức cho cộng đồng: tốc độ đang tăng rất mạnh, nên kỷ luật launch cũng phải tăng theo.
Top comments (0)