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

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

Компании, где спрашивали
УралсибУралсиб

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

sobes.tech AI

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

Как это работает:

  • Приложение формирует SQL-запрос, подставляя пользовательский ввод напрямую в строку запроса без проверки.
  • Злоумышленник вводит специальный SQL-код, который изменяет структуру запроса.
  • В результате можно получить несанкционированный доступ к данным, изменить или удалить их.

Пример уязвимого кода на Java:

String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Если в поле username ввести admin' --, запрос превратится в:

SELECT * FROM users WHERE username = 'admin' --' AND password = ''

-- — это комментарий в SQL, остальная часть игнорируется, и проверка пароля пропускается.

Чтобы защититься от SQL Injection:

  • Используйте подготовленные выражения (PreparedStatement) с параметризованными запросами.
  • Валидируйте и очищайте пользовательский ввод.
  • Ограничивайте права доступа к базе данных.

Пример безопасного кода:

String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();