Ответ
SQL-инъекция — это уязвимость, возникающая при неправильной обработке пользовательского ввода, который подставляется в SQL-запрос. Атакующий может внедрить вредоносный SQL-код, что приведёт к выполнению нежелательных операций (чтение, изменение, удаление данных и т. д.).
Пример уязвимого кода:
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
Если ввести ' OR '1'='1 в поле username, запрос превратится в:
SELECT * FROM users WHERE username='' OR '1'='1' AND password='...'
Это вернёт все записи из таблицы users.
Защита:
- Используйте подготовленные выражения (PDO/mysqli):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username=:username AND password=:password");
$stmt->execute(['username' => $username, 'password' => $password]);
- Валидация и экранирование ввода.
- Принцип минимальных привилегий для БД.