Skip to main content

Що таке SQL Injection?

SQL Injection (SQL-ін'єкція) - це атака на веб-застосунок, за якої зловмисник вставляє шкідливий SQL-код у вхідні дані, щоб обдурити запит до бази даних.

Простіше кажучи: застосунок очікує звичайний ввід (логін, пароль, пошук), а отримує SQL-команду і виконує її.


Як працює SQL Injection простою мовою

Зазвичай застосунок формує SQL-запит приблизно так:

SELECT * FROM users WHERE login = 'user' AND password = 'pass';

Якщо застосунок не перевіряє ввід, зловмисник може ввести:

' OR 1=1 --

У підсумку запит перетворюється на:

SELECT * FROM users WHERE login = '' OR 1=1 --';

1=1 завжди істина, тому база даних повертає всі записи, і вхід відбувається без пароля.


Що може зробити зловмисник

За допомогою SQL Injection можна:

  • обійти автентифікацію;
  • прочитати дані з бази (паролі, персональні дані);
  • змінити або видалити дані;
  • отримати повний контроль над базою даних;
  • іноді - виконати команди на сервері.

Це одна з найнебезпечніших L7-атак.


Де виникає SQL Injection

  • форми логіну;
  • форми пошуку;
  • URL-параметри;
  • API-запити;
  • будь-які місця, де користувацький ввід потрапляє в SQL-запит.

Які властивості безпеки порушуються

  • Confidentiality - витік даних;
  • Integrity - підміна або видалення даних;
  • іноді Availability - видалення таблиць або БД.

Види SQL Injection (коротко)

  • Classic SQLi - результат одразу видно;
  • Blind SQLi - результат визначається опосередковано (true/false, затримки);
  • Union-based SQLi - об'єднання запитів (UNION);
  • Error-based SQLi - використання помилок БД.

Чому SQL Injection досі існує

  • відсутність перевірки вхідних даних;
  • динамічне формування SQL-запитів;
  • застарілий чи небезпечний код;
  • відсутність безпечних практик розробки.

Як захищаються від SQL Injection

Основні заходи захисту:

  • prepared statements / parameterized queries (головне);
  • валідація і фільтрація вхідних даних;
  • мінімальні права у користувача БД;
  • WAF;
  • оновлення застосунків і фреймворків.

Ніколи не підставляти користувацький ввід напряму в SQL-запит.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.