SQL Injection (SQLi) là gì?
Tấn công mạng chèn mã SQL độc hại vào truy vấn database để truy cập, sửa đổi, xóa dữ liệu nhạy cảm. Ví dụ: tấn công Sony Pictures.
Cơ chế hoạt động
Ứng dụng web dùng SQL database (IBM Db2, Oracle, MySQL, SQL Server...). Kẻ tấn công chèn câu lệnh SQL độc hại vào input (form, URL, cookie) → database thực thi → vượt qua kiểm soát truy vấn bình thường.
Tại sao SQL Injection nguy hiểm?
- Truy cập dữ liệu không được phép (thông tin khách hàng, thẻ tín dụng, mật khẩu)
- Xóa, sửa đổi, đánh cắp dữ liệu
- Deface website (thay đổi giao diện)
- Lấy quyền admin hệ thống
- Xâm nhập mạng nội bộ (pivot attack)
- Top 10 OWASP - rủi ro nghiêm trọng nhất ứng dụng web
3 loại SQL Injection chính
- In-band SQLi (Classic): Kết quả trả về qua cùng kênh (error-based, union-based)
- Inferential SQLi (Blind): Không thấy kết quả trực tiếp, suy luận qua boolean/time-based
- Out-of-band SQLi: Dùng kênh riêng (DNS, HTTP) để lấy dữ liệu
Nguyên nhân lỗ hổng SQL Injection
Input người dùng không được validate/escape → nối trực tiếp vào câu query SQL → attacker chèn mã độc.
Ví dụ SQL Injection
- Truy xuất dữ liệu ẩn: `' OR '1'='1` → bypass login
- Subvert logic: `--` comment bỏ qua kiểm tra password
- UNION attack: Kết hợp kết quả từ nhiều bảng
Phòng chống SQL Injection
- Parameterized Queries / Prepared Statements (Quan trọng nhất)
- Stored Procedures (với validation input)
- Input Validation & Sanitization (Whitelist)
- ORM (Object-Relational Mapping) an toàn
- Least Privilege: DB user quyền tối thiểu
- WAF (Web Application Firewall) rules
- Error handling: Không hiển thị lỗi SQL chi tiết cho user
- Cập nhật, vá lỗ hổng thường xuyên
SQL Injection còn đe dọa 2024 không?
Vẫn là mối đe dọa lớn. Tripwire: "SQLi vẫn tràn lan miễn còn web app lỗi, database có dữ liệu có giá trị". Hệ thống cũ, unpatched nhất bị tác động.