Назад к вопросам
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-кода.