Docs học tập
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)

On this page