Cover image
Lê Ngọc Phúc
Lê Ngọc Phúc
Mobile Developer

Solo Builder: Khi "Vibe Coding" Va Phải "Red Flag" Bảo Mật (Và Cách Tôi Sống Sót)

15 hours ago
12 views

1

Thuật ngữ "Vibe coding" dạo gần đây hot rần rần. Cái cảm giác nửa đêm ngồi thả hồn theo prompt, đưa ý tưởng cho AI rồi xem nó "vẽ" ra một ứng dụng hoàn chỉnh trong vài tiếng đồng hồ nó... sướng tê người. Là một solo builder, tôi từng nghiện cái cảm giác đó. Tốc độ là lẽ sống. Ship sản phẩm nhanh là chân lý.
Nhưng, cái "vibe" đó thường chỉ kéo dài cho đến khi bạn nhận được email đầu tiên từ một người dùng lạ hoắc, báo rằng họ vừa tìm thấy một lỗ hổng có thể đọc được database của toàn bộ hệ thống.
Đó là câu chuyện thật của tôi, và là lúc tôi nhận ra: Vibe coding rất vui, cho đến khi security tìm tới gõ cửa.
1. Giai đoạn "Điếc không sợ súng" và cú tát từ thực tế
Khi bắt đầu dự án SaaS cá nhân đầu tiên, tôi đặt mục tiêu: MVP (Minimum Viable Product) phải lên sóng trong 2 tuần.
Để đạt được tốc độ đó, tôi phó mặc rất nhiều thứ cho AI và các boilerplate có sẵn. Tôi chỉ tập trung vào UI/UX, tính năng cốt lõi và luồng thanh toán. Còn bảo mật? Tôi tự nhủ: "Thôi kệ, app đã có ai dùng đâu mà hack, để sau tính!"
Tôi đã làm những điều mà bây giờ nghĩ lại phải rùng mình:
  • Để nguyên các thiết lập CORS (Cross-Origin Resource Sharing) dạng * cho tiện test.
  • Cơ chế phân quyền (Authorization) lỏng lẻo, chỉ check ở Client-side mà bỏ quên Validation kỹ càng ở Backend.
  • Sử dụng API key trực tiếp trong code thay vì cấu hình biến môi trường (Environment Variables) cẩn thận, suýt chút nữa là commit thẳng lên GitHub public.
Sản phẩm may mắn được đón nhận, user tăng trưởng nhanh ngoài mong đợi. Và chuyện gì đến cũng đến. Một ngày đẹp trời, một cậu bạn là Sec-engineer vào dùng thử app và nhắn tin riêng cho tôi: "Ông ơi, tui vừa bypass qua cái middleware của ông bằng cách sửa ID trên URL này. Fix gấp đi không lộ hết data khách hàng."
Mồ hôi hột tôi tuôn ra. Lúc đó tôi mới thấm câu nói: Nợ kỹ thuật (Technical Debt) về tính năng thì trả bằng thời gian, nhưng nợ về bảo mật thì phải trả bằng uy tín và cả tiền bạc.
2. Bài toán dung hòa: Tốc độ vs An toàn
Sau cú sụp tim đó, tôi buộc phải dừng việc build tính năng mới trong 2 tuần chỉ để rà soát và vá lỗ hổng. Quy trình build nhanh, làm gọn trước đó bị xáo trộn hoàn toàn.
Là solo builder, chúng ta không có một team Security riêng biệt để audit code. Nhưng nếu để bảo mật sang một bên, bạn đang tự đặt một quả bom hẹn giờ dưới chân mình. Vậy tôi đã dung hòa hai yếu tố này thế nào trong những dự án sau?
Tôi chuyển từ "Vibe coding bạt mạng" sang "Smart Vibe Coding" với quy tắc: Chậm lại 5% ở những chỗ chí mạng.
Cái gì hiệu quả?
  • Chốt chặn ở Backend, thả lỏng ở Frontend: Bạn có thể dùng AI để sinh code UI nhanh, lỗi một chút cũng không sao. Nhưng riêng logic liên quan đến Authentication, Authorization và Database Validation ở Backend, tôi luôn tự tay review, không "phó mặc hoàn toàn" cho AI nữa.
  • Tận dụng công cụ quét tự động (DevSecOps cho Solo Builder): Tôi tích hợp Snyk và GitHub Dependabot vào repo. Cứ mỗi lần push code, công cụ sẽ tự động check xem thư viện nào có lỗ hổng (CVE) hay không. Việc này mất thêm 1-2 phút setup ban đầu nhưng cứu mạng tôi vô số lần về sau.
  • Tư duy "Zero Trust" ngay từ đầu: Hãy coi mọi dữ liệu gửi lên từ Client đều là "độc hại" cho đến khi được chứng minh ngược lại.
Cái gì chưa hiệu quả?
  • Cố gắng áp dụng các tiêu chuẩn bảo mật quá khắt khe của doanh nghiệp lớn (như Pentest chuyên sâu, Compliance phức tạp) vào giai đoạn MVP. Việc này làm thui chột tốc độ và khiến dự án chết yểu trước khi kịp ra thị trường. Hãy nhớ: Bảo mật vừa đủ với quy mô của app.
3. Nếu nhìn lại, tôi có thay đổi cách build của mình?
Chắc chắn là . Nếu quay lại vạch xuất phát, tôi vẫn chọn Vibe coding để giữ ngọn lửa đam mê và tốc độ, nhưng tôi sẽ đổi cách tiếp cận sang Security-by-Design ở mức tối giản (Minimal Viable Security).
Thay vì đợi app lớn rồi mới sửa (refactor) – việc mà tôi cam đoan là cực kỳ đau khổ vì code lúc đó đã rối như tơ vò – tôi chọn cách xây dựng một "khung xương" an toàn ngay từ ngày đầu tiên:
  1. Chốt format bảo mật chuẩn từ Day 1: Thiết lập JWT, Hash password, phân quyền rõ ràng ngay từ route đầu tiên.
  2. Environment Variables là bất di bất dịch: Tuyệt đối không hardcode bất kỳ secret key nào, dù là dự án test.
Lời kết & Bài học cho các Solo Builder
Gửi các anh em solo builder đang ngày đêm "vibe" cùng AI: Tốc độ giúp bạn sống sót trên thị trường, nhưng bảo mật mới là thứ giúp bạn giữ được sự sống đó.
Đừng đợi đến khi data người dùng bị đem rao bán trên các diễn đàn rồi mới ngồi khóc vạch lối sửa sai. Hãy biến bảo mật thành một phần của "vibe". Khi bạn tạo một component mới, hãy dành ra đúng 30 giây để tự hỏi: "Nếu user truyền data bậy vào đây, hệ thống có sập không?". Chỉ cần bấy nhiêu thôi, bạn đã đi trước 80% các sản phẩm chắp vá ngoài kia rồi.
Chúc anh em ship app nhanh, mượt và... ngủ ngon giấc mỗi đêm!
Bạn đã từng phải trả giá cho một tính năng build quá nhanh chưa? Hãy để lại bình luận chia sẻ câu chuyện "chữa cháy" của bạn nhé!
1