Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: SQL injection, concatenation, parameterized query, prepared statement, security

Почему использование строковой конкатенации в SQL-запросах небезопасно?

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

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

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

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

Проблема строковой конкатенации

Когда вы формируете SQL-запрос путем склеивания строк, вы смешиваете код запроса с данными, полученными от пользователя. Если пользователь введет специальные символы, такие как кавычки, он может изменить логику запроса. Например, вместо простого поиска имени он может выполнить удаление данных или получить доступ к чужим записям.

Пример уязвимости

Рассмотрим код на Python с использованием библиотеки sqlite3:

user_input = "' OR '1'='1"
query = "SELECT * FROM users WHERE name = '" + user_input + "'"
cursor.execute(query)

В результате запрос станет: SELECT * FROM users WHERE name = '' OR '1'='1'. Условие OR '1'='1' всегда истинно, поэтому будут возвращены все пользователи. Это простейшая SQL-инъекция.

Безопасное решение: параметризованные запросы

Параметризованные запросы (prepared statements) передают данные отдельно от кода запроса. База данных обрабатывает их как данные, а не как часть SQL-команды. Пример:

user_input = "' OR '1'='1"
query = "SELECT * FROM users WHERE name = ?"
cursor.execute(query, (user_input,))

Теперь даже если пользователь введет вредоносную строку, она будет воспринята как литерал, а не как часть SQL. Символы экранируются автоматически.

Где это применяется

Параметризованные запросы поддерживаются всеми современными базами данных и языками программирования: Python (sqlite3, psycopg2), Java (JDBC PreparedStatement), C# (SqlCommand с параметрами), PHP (PDO), JavaScript (node-postgres) и другими.

Вывод

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

  • SQL

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

#SQL injection

#concatenation

#parameterized query

#prepared statement

#security

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.