SQL Injection (SQLi) is a code injection vulnerability that occurs when untrusted data is sent to a SQL interpreter as part of a command or query. Attackers can use this to read, modify, or delete database data, bypass authentication, or in some cases execute commands on the underlying operating system.
When user input is concatenated directly into SQL queries without proper sanitization or parameterization, attackers can inject their own SQL commands. The database cannot distinguish between legitimate queries and malicious ones.
Vulnerable code concatenating user input:
// Vulnerable PHP code
$query = "SELECT * FROM users WHERE username='" . $_POST['user'] . "'";
// Normal input: admin
SELECT * FROM users WHERE username='admin'
// Malicious input: admin' OR '1'='1
SELECT * FROM users WHERE username='admin' OR '1'='1'
// Returns all users!