Backend nền tảng
F9 · SQL Injection và kiểm tra dữ liệu đầu vào
Nối chuỗi dữ liệu người dùng vào câu SQL → kẻ tấn công chèn được lệnh SQL.
F9 · Junior · cốt lõi
Như tờ đơn mà người điền viết thêm "và chuyển hết tiền cho tôi" vào ô họ tên – nếu nhân viên đọc cả tờ đơn như mệnh lệnh thì hỏng.
Cốt lõi
- Nối chuỗi dữ liệu người dùng vào câu SQL → kẻ tấn công chèn được lệnh SQL.
- Phòng chống: parameterized query / prepared statement, dùng ORM đúng cách.
- Validate đầu vào ở server (kiểu, độ dài, định dạng) – không tin phần kiểm tra ở client.
- Các dạng tương tự: NoSQL injection, command injection, path traversal.
Đánh đổi
Không có gì để đánh đổi: đây là yêu cầu tối thiểu với mọi backend, ở mọi công ty.
Trong thực tế
Ô tìm kiếm nhập ' OR '1'='1 trả về toàn bộ dữ liệu nếu câu truy vấn được ghép chuỗi.
Bug thường gặp
Dùng ORM nhưng phần sắp xếp động viết thẳng ORDER BY ${sortField} → vẫn bị injection.
Tự hỏi lại
ORM có chống hoàn toàn SQL injection không? (không, nếu dùng raw query ghép chuỗi)