SQL Injection

SQL Injection là lỗ hổng bảo mật cho phép hacker thực thi truy vấn SQL trái phép. Tìm hiểu SQL Injection là gì, cách thức tấn công, hậu quả và biện pháp phòng chống hiệu quả.

SQL Injection

SQL Injection là gì?

SQL Injection (hay tiêm SQL) là một kỹ thuật tấn công mạng lợi dụng các lỗ hổng bảo mật của website hoặc ứng dụng để chèn và thực thi các truy vấn SQL độc hại vào cơ sở dữ liệu. Mục đích thường là lấy cắp dữ liệu, thay đổi thông tin, hoặc chiếm quyền quản trị hệ thống.

Cách hoạt động của SQL Injection

Giả sử bạn có form đăng nhập với truy vấn SQL đơn giản:

SELECT * FROM users WHERE username='user' AND password='pass';

Hacker có thể nhập vào form:

' OR 1=1 --

Khi đó truy vấn sẽ thành:

SELECT * FROM users WHERE username='' OR 1=1 --' AND password='';

Kết quả: điều kiện luôn đúng (1=1) và hacker vào được hệ thống mà không cần mật khẩu.

Hậu quả của SQL Injection

  • Lộ thông tin nhạy cảm (password, email, thông tin cá nhân)
  • Mất quyền kiểm soát database và website
  • Dữ liệu bị sửa đổi hoặc xóa mất
  • Gây downtime, mất uy tín doanh nghiệp

Các dạng SQL Injection phổ biến

Dạng tấn công Mô tả
In-band SQL Injection Kết quả truy vấn trả về trực tiếp trên trình duyệt
Blind SQL Injection Không hiển thị kết quả trực tiếp, hacker thử nghiệm bằng cách gửi các câu truy vấn true/false
Out-of-band SQL Injection Sử dụng kênh thứ 2 để nhận kết quả (như DNS request)

Biện pháp phòng chống SQL Injection hiệu quả

  • Dùng Prepared Statements (tham số hoá truy vấn): an toàn và phổ biến nhất.
  • Luôn validate input người dùng (loại bỏ ký tự đặc biệt)
  • Hạn chế quyền database (principle of least privilege)
  • Sử dụng WAF (Web Application Firewall) để phát hiện và chặn các cuộc tấn công SQL Injection

Ví dụ Prepared Statements (PHP với PDO)

// An toàn - chống được SQL Injection
$stmt = $pdo->prepare('SELECT * FROM users WHERE username=? AND password=?');
$stmt->execute([$username, $password]);

Code trên giúp database tự động xử lý tham số đầu vào an toàn.

Kiểm tra website có bị SQL Injection không?

  • Sử dụng các công cụ như SQLmap, OWASP ZAP
  • Chạy các penetration test định kỳ
  • Theo dõi và kiểm tra log database bất thường

Kết luận

SQL Injection là lỗ hổng bảo mật nguy hiểm hàng đầu nhưng dễ phòng tránh nhất nếu làm đúng cách. Bất kỳ ai phát triển hoặc quản trị web cũng cần hiểu rõ SQL Injection để bảo vệ dữ liệu và uy tín của website trước các cuộc tấn công.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...