SQL Injection: что это такое и как на него защититься
SQL injection (SQLi) - это метод атаки на веб-приложения, в котором злоумышленник пытается вводить злонамеренный SQL-код в SQL-запросы, которые выполняются на сервере. Целью атаки является получение доступа к конфиденциальной информации, изменение или удаление данных в базе данных.
Рассмотрим пример SQL-инъекции на основе сценария аутентификации. Допустим, у нас есть следующий код для проверки имени пользователя и пароля:
php
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysql_query($query);
Злоумышленник может попытаться ввести злонамеренный SQL-код в поле имени пользователя, что позволит ему получить доступ к базе данных.
Пример кода для проведения атаки:
sql
' or 1=1;--
Это приведет к следующему измененному SQL-запросу:
sql
SELECT * FROM users WHERE username = '' OR 1=1;--' AND password = ''
Теперь условие WHERE будет верно для любого пользователя, поскольку `1=1` всегда истина, и комментарий `--` заставит сервер проигнорировать остаток запроса.
Для защиты от SQL-инъекций следует использовать параметризированные запросы, которые ограничивают возможность ввода злонамеренного SQL-кода пользователем. Например, вместо склеивания строки запроса можно использовать подстановку параметров, как показано в следующем коде:
php
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute(['username' => $username, 'password' => $password]);
$result = $stmt->fetch();
Здесь мы используем PDO и параметризованный запрос, передавая параметры через массив `execute()`. Это предотвращает возможность ввода злонамеренного SQL-кода пользователем и обеспечивает безопасность приложения.
SQL-инъекции могут стать серьезной проблемой для веб-приложений, поэтому необходимо тщательно проверять все входные данные, используемые в SQL-запросах, и следовать рекомендациям по безопасности при работе с базами данных.