Sobes.tech
Назад к вопросам
Junior — Middle
93

Можете объяснить, что подразумевается под SQL Injection и каким образом его можно использовать или предотвратить?

Ответ от нейросети

sobes.tech AI

SQL Injection — это уязвимость, при которой злоумышленник может внедрить произвольный SQL-код в запрос к базе данных через пользовательский ввод. Это происходит, если приложение формирует SQL-запросы путём конкатенации строк без должной фильтрации.

Пример использования SQL Injection:

-- Обычный запрос:
SELECT * FROM users WHERE username = 'user' AND password = 'pass';

-- Если пользователь введёт в поле username: ' OR '1'='1
-- Запрос станет:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'pass';
-- Это условие всегда истинно, и злоумышленник может получить доступ без пароля.

Как предотвратить SQL Injection:

  • Использовать подготовленные выражения (prepared statements) с параметризацией, где значения подставляются отдельно от кода запроса.
  • Применять ORM-библиотеки, которые автоматически экранируют данные.
  • Валидировать и фильтровать пользовательский ввод.
  • Ограничивать права доступа к базе данных.

В Node.js с использованием, например, библиотеки mysql2 подготовленные выражения выглядят так:

const [rows] = await connection.execute('SELECT * FROM users WHERE username = ? AND password = ?', [username, password]);

Это гарантирует, что введённые данные не будут интерпретированы как часть SQL-кода.