Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: SQL injection, security, prepared statements, input validation, ORM

Что такое SQL Injection и как от него защититься?

Вопрос проверяет понимание уязвимости SQL Injection и методов защиты от неё, что критично для безопасности веб-приложений.

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

SQL Injection — это атака, при которой злоумышленник внедряет вредоносный SQL-код в запрос через пользовательский ввод. Это может привести к краже данных, их изменению или удалению. Защититься можно с помощью параметризованных запросов (prepared statements), использования ORM, экранирования ввода и ограничения прав базы данных.

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

Что такое SQL Injection?

SQL Injection — это тип атаки на веб-приложения, при котором злоумышленник вставляет или "инжектирует" вредоносный SQL-код в запрос к базе данных. Это происходит, когда приложение напрямую конкатенирует пользовательский ввод с SQL-запросом без должной обработки. Например, на странице входа злоумышленник может ввести в поле логина что-то вроде ' OR '1'='1, что превратит запрос в SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '...', и условие всегда будет истинным, позволяя обойти аутентификацию.

Как защититься?

Основной метод защиты — использование параметризованных запросов (prepared statements). Они отделяют SQL-код от данных, передавая параметры отдельно, что не позволяет интерпретировать ввод как часть запроса. Также эффективно использование ORM (Object-Relational Mapping), которые автоматически экранируют ввод. Дополнительно стоит применять валидацию и экранирование ввода, а также ограничивать права пользователя базы данных минимально необходимыми.

Пример кода

Уязвимый код на PHP:

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);

Безопасный код с prepared statements:

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();

В безопасном варианте знаки вопроса заменяются на переданные значения, но они не интерпретируются как SQL-код.

Вывод

SQL Injection — одна из самых опасных уязвимостей, но её легко предотвратить, используя параметризованные запросы или ORM. Всегда обрабатывайте пользовательский ввод как данные, а не как код, и следуйте принципу наименьших привилегий для базы данных.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • SQL

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

#SQL injection

#security

#prepared statements

#input validation

#ORM

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