SQL Injection là một kỹ thuật lợi dụng những lỗ hổng về câu truy vấn lấy dữ liệu của những website không an toàn trên web, đây là một kỹ thuật tấn công rất phổ biến và sự thành công của nó cũng tương đối cao.
Có thể gây ra những thiệt hại khổng lồ. Với SQL Injection, hacker có thể truy cập một phần hoặc toàn bộ dữ liệu trong hệ thống.
Lỗ hổng này rất nổi tiếng, từ developer đến hacker gần như ai cũng biết. Ngoài ra, còn có 1 số tool tấn công SQL Injection cho dân “ngoại đạo”, những người không biết gì về lập trình.
Dễ tấn công, phổ biến, gây ra hậu quả nghiêm trọng, đó là lý dó Inject (Không chỉ SQL mà OS và LDAP) nằm chễm chễ ở vị trí đầu bảng trong top 10 lỗ hỗng bảo mật của OWASP.
Cơ chế SQL Injection vô cùng đơn giản. Ta thường sử dụng câu lệnh SQL để truy cập dữ liệu. Giả sử, muốn tìm đăng nhập user, ta thường viết code như sau:
var username = request.username; // Tqh001
var password = request.password; // Tqh123@123
var sql = "SELECT * FROM Users WHERE Username = '" + username + "' AND Password = '" + password + "'";
// SELECT * FROM Users WHERE Username = ' Tqh001' AND Password = ' Tqh123@123'
Đoạn code trên đọc thông tin nhập vào từ user và cộng chuỗi để thành câu lệnh SQL. Để thực hiện tấn công, Hacker có thể thay đổi thông tin nhập vào, từ đó thay đổi câu lệnh SQL .
var password = request.password; // ' OR " = "
var sql = "SELECT * FROM Users WHERE Username = '" + username + "' AND Password = '" + password + "'";
// SELECT * FROM Users WHERE Username = ' Tqh001' AND Password = " OR " = '
Hacker có thể thông qua SQL Injection để dò tìm cấu trúc dữ liệu (Gồm những table nào, có những column gì), sau đó bắt đầu khai thác dữ liệu bằng cách sử dụng các câu lệnh như UNION, SELECT TOP 1...
Cách phòng chống SQL Injection:
Hiện nay có một số hướng dẫn tốt để tránh lỗi SQL injection cho các nhà phát triển ứng dụng chẳng hạn như:
• Tất cả các dữ liệu được nhập vào bởi người dùng phải được lọc, loại bỏ tất cả các ký tự hoặc các chuỗi không phải là một phần của biểu thức đầu vào, và tất cả các trường nhập vào đều phải được xác nhận.
• Các lệnh SQL được sử dụng để truy nhập cơ sử dữ liệu từ mã lệnh trong phần mềm ứng dụng không được tạo ra bằng cách sử dụng các chuỗi ghép nối.
• Các tham số có kiểu mạnh (thường kết hợp với các Store procedure) phải được sử dụng bất kỳ nơi nào có thể.
• Việc đăng nhập vào ứng dụng phải sử dụng một Store procedure chức năng được thực hiện với một Store procedure xác nhận tốt.
• Dữ liệu nhập vào của tất cả người dùng phải được cho vào trong dấu ngoặc kép, kể cả dữ liệu số.