Cheatsheet: Bảo mật web cho vibe coder: OWASP, secrets và dữ liệu người dùng
Tra cứu nhanh cho toàn khóa. Dùng trước khi deploy, khi review code AI sinh, hoặc khi nghi ngờ một đoạn code có lỗi.
Bản đồ 6 rủi ro phổ biến (1.1)
| # | Rủi ro | Dấu hiệu trong code AI sinh | Hậu quả |
|---|---|---|---|
| 1 | SQL injection | Nối chuỗi vào câu SQL | Đọc/ghi/xóa dữ liệu trái phép |
| 2 | XSS | Render dữ liệu người dùng không escape | Chạy JS độc trong trình duyệt nạn nhân |
| 3 | CSRF | Thao tác thay đổi state không có token | Kẻ tấn công mượn phiên đăng nhập |
| 4 | Lộ API key / secrets | Key hardcode trong code, .env bị commit |
Mất tiền, mất dữ liệu, bị dùng chùa |
| 5 | Thiếu HTTPS / phân quyền yếu | URL http://, route không kiểm tra quyền |
Nghe lén, leo thang đặc quyền |
| 6 | Validate input chỉ ở client | Chỉ có required, pattern trong HTML |
Bypass bằng request trực tiếp |
Vì sao code AI cần review: AI tối ưu cho "chạy được", không tối ưu cho "an toàn". Nó thường chọn mẫu code ngắn nhất, phổ biến nhất trên internet, và mẫu phổ biến thường là mẫu cũ, thiếu lớp phòng thủ.
Warning: AI không biết dữ liệu của bạn đến từ đâu. Mọi chỗ có input người dùng, mọi chỗ có secret, mọi chỗ có quyền truy cập: đó là chỗ phải tự kiểm tra.
SQL injection (1.2)
Mẫu nguy hiểm vs mẫu an toàn
// SAI: nối chuỗi, input chui thẳng vào SQL
const q = "SELECT * FROM users WHERE email = '" + email + "'";
db.query(q);
// ĐÚNG: parameterized query, input chỉ là tham số
const q = "SELECT * FROM users WHERE email = $1";
db.query(q, [email]);
// ĐÚNG với placeholder khác nhau theo driver
db.query("SELECT * FROM users WHERE email = ?", [email]); // mysql2
db.query("SELECT * FROM users WHERE email = :email", { email }); // oracle
Khi nào dùng gì
This cheatsheet is premium content. Sign in and purchase the course to view the full content. Sign in