Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке SQL Injection?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**SQL Injection (SQL-ін'єкція)** - це атака на веб-застосунок, за якої зловмисник вставляє шкідливий SQL-код у вхідні дані, щоб обдурити запит до бази даних. **Ключове:** ніколи не можна підставляти користувацький ввід напряму в SQL-запит - головний захист це prepared statements.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**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-запит.**Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.