Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про PHP: sql injection, pdo, mysql, validation

Как предотвратить SQL-инъекции в PHP-приложениях?

Вопрос проверяет знание методов защиты базы данных от SQL-инъекций, которые могут быть использованы злоумышленниками для получения или изменения данных.

Короткий ответ

SQL-инъекций можно избежать, используя подготовленные запросы с PDO или MySQLi, которые отделяют данные от SQL-кода. Также важно валидировать и фильтровать пользовательский ввод, ограничивать права доступа к базе данных, использовать современные инструменты для работы с базой и обновлять программное обеспечение.

Длинный ответ

SQL-инъекции представляют собой одну из самых распространённых угроз для веб-приложений. Они возникают, когда пользовательский ввод некорректно обрабатывается и включается в SQL-запрос, позволяя злоумышленнику выполнять произвольные SQL-команды.

Основные методы защиты:

1. Использование подготовленных запросов:
Подготовленные запросы позволяют отделить данные от SQL-кода, предотвращая их интерпретацию как команды. Это наиболее надёжный метод защиты.
Пример с использованием PDO:

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();

С MySQLi:

$stmt = $mysqli->prepare('SELECT * FROM users WHERE username = ?');
$stmt->bind_param('s', $username);
$stmt->execute();

2. Экранирование пользовательского ввода:
Если вы по каким-либо причинам не используете подготовленные запросы, экранируйте ввод с помощью функций, таких как mysqli_real_escape_string(). Однако этот метод менее надёжен, чем подготовленные запросы.

3. Валидация и фильтрация данных:
Пример использования PHP-функций:

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if (!$email) {
   	 die('Некорректный email!');
}

4. Ограничение прав доступа к базе данных:
Создавайте пользователей базы данных с минимальными привилегиями. Например, если скрипт только читает данные, используйте пользователя с правами только на чтение.

5. Использование современных библиотек:
Избегайте устаревших функций, таких как mysql_*. Вместо них используйте PDO или MySQLi.

6. Обновление ПО:
Регулярно обновляйте PHP, базы данных и используемые библиотеки, чтобы устранить известные уязвимости.

Вывод:
Лучший способ защиты от SQL-инъекций — использование подготовленных запросов. Дополнительно всегда проверяйте пользовательский ввод, ограничивайте права доступа к базе данных и следите за актуальностью используемых инструментов.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • PHP

    PHP

Ключевые слова

#sql injection

#pdo

#mysql

#validation

Подпишись на PHP Developer в телеграм