Sobes.tech
Junior — Middle

Мо метавонед шарҳ диҳед, ки чӣ гуна як ҳамлаи навъи SQL Injection амалӣ мешавад ва чӣ гуна он аз заъифӣ дар пойгоҳи додаҳо истифода мебарад?

sobes.tech AI

Ҷавоб аз 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();