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.