Lỗ hổng SQL Injection (SQLI) xảy ra khi dữ liệu đầu vào của người dùng được sử dụng trong các câu lệnh truy vấn cơ sở dữ liệu mà không được kiểm tra đúng cách. Điều này cho phép kẻ tấn công đánh lừa trình thông dịch truy vấn thực thi các lệnh không mong muốn hoặc truy cập dữ liệu trái phép. Hãy xem xét đoạn mã sau:
mysql_query("SELECT * FROM user WHERE uid='".$_GET['id']."'") //foreign SQL commands inclusion possibility
Vì tính hợp lệ của tham số đầu vào $_GET không được kiểm tra, nên một cuộc tấn công SQLI có thể được thực hiện bằng cách cung cấp id tham số với các giá trị sau:
/login.php?id=xxx'+OR+'1'%3D'1
Truy vấn trở thành SELECT * FROM user WHERE uid= 'xxx' OR '1'= '1'. Về cơ bản, cuộc tấn công thay đổi ngữ nghĩa của truy vấn thành SELECT * FROM user, cho phép kẻ tấn công truy cập trái phép vào bảng user. Giống như mysql_query, bất kỳ hàm tích hợp sẵn nào khác của ngôn ngữ lập trình tương tác với cơ sở dữ liệu như mysql_execute đều có thể gây ra lỗi SQLI.
Tài liệu tham khảo
1. L. K. Shar, L. C. Briand and H. B. K. Tan, "Web Application Vulnerability Prediction Using Hybrid Program Analysis and Machine Learning," in IEEE Transactions on Dependable and Secure Computing, vol. 12, no. 6, pp. 688-707, 1 Nov.-Dec. 2015, doi: 10.1109/TDSC.2014.2373377,