Ответ
SQL-инъекция — это уязвимость безопасности, возникающая, когда некорректно обработанные пользовательские данные напрямую включаются в SQL-запрос. Это позволяет злоумышленнику выполнить произвольный вредоносный SQL-код в базе данных.
Почему это опасно:
- Кража, изменение или удаление данных.
- Обход аутентификации.
- Выполнение административных операций на сервере БД.
Пример уязвимого кода (Java):
String username = request.getParameter("username");
String query = "SELECT * FROM users WHERE username = '" + username + "'";
// Если username = ' OR '1'='1, запрос станет:
// SELECT * FROM users WHERE username = '' OR '1'='1'
// и вернёт всех пользователей.
Основные методы защиты:
- Использование Prepared Statements (наиболее эффективно): Параметры передаются отдельно от запроса и автоматически экранируются.
String sql = "SELECT * FROM users WHERE username = ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, username); // Безопасно - Использование ORM (например, Hibernate, JPA) с именованными параметрами.
- Строгая валидация и санитизация ввода (белые списки допустимых символов).
- Принцип минимальных привилегий: Учётная запись приложения в БД должна иметь только необходимые права.