Nâng caoAn toàn ~10 phút

SQL Injection — an toàn cơ bản

SQL Injection xảy ra khi dữ liệu người dùng bị ghép trực tiếp vào câu lệnh SQL, cho phép kẻ tấn công đổi ý nghĩa truy vấn.

Lý thuyết

Cách lỗ hổng xuất hiện

Giả sử code ghép chuỗi: "SELECT * FROM users WHERE name = '" + input + "'".

Nếu người dùng nhập ' OR '1'='1, câu lệnh trở thành ... WHERE name = '' OR '1'='1' — trả về toàn bộ bảng.

Tệ hơn, nhập '; DROP TABLE users; -- có thể phá dữ liệu.

Cách phòng tránh

  • Prepared statements / tham số hóa: WHERE name = ? và truyền giá trị riêng. DBMS không bao giờ hiểu dữ liệu là mã lệnh.
  • Kiểm tra & giới hạn đầu vào, dùng ORM đúng cách.
  • Nguyên tắc tối thiểu quyền: tài khoản app không nên có quyền DROP.
Bên phải là ví dụ an toàn minh họa: khi coi ' OR '1'='1 là *dữ liệu* (một cái tên), truy vấn trả về 0 dòng thay vì lộ dữ liệu.

Thuật ngữ (di chuột để xem giải thích)

Dữ liệu mẫu

Đang tải dữ liệu mẫu…