Впровадження sql-коду - це
SQL ін'єкція (англ. SQL injection) - один з поширених способів злому сайтів і програм. працюючих з базами даних. заснований на впровадженні в запит довільного SQL-коду.
Впровадження SQL, в залежності від типу використовуваної СУБД і умов впровадження, може дати можливість атакуючому виконати довільний запит до бази даних (наприклад, прочитати вміст будь-яких таблиць. Видалити, змінити або додати дані), отримати можливість читання і / або запису локальних файлів і виконання довільних команд на атакується сервері.
Атака типу впровадження SQL може бути можлива через некоректну обробки вхідних даних, що використовуються в SQL-запитах.
Розробник прикладних програм, що працюють з базами даних, повинен знати про такі вразливості і вживати заходів протидії запровадженню SQL.
Принцип атаки впровадження SQL
Припустимо, серверне ПЗ. отримавши вхідний параметр id, використовує його для створення SQL-запиту. Розглянемо наступний PHP -скріпт:
Таким чином, зміна вхідних параметрів шляхом додавання в них конструкцій мови SQL викликає зміна в логіці виконання SQL-запиту (в даному прикладі замість новини з заданим ідентифікатором будуть обрані всі наявні в базі новини, оскільки вираз 1 = 1 завжди істинно).
Впровадження в строкові параметри
Припустимо, серверне ПЗ, отримавши запит на пошук даних в новинах параметром search_text, використовує його в наступному SQL-запиті (тут параметри екрануються лапками):
Але, запровадивши в параметр search_text символ лапки (який використовується в запиті), ми можемо кардинально змінити поведінку SQL-запиту. Наприклад, передавши як параметр search_text значення ') + and + (news_id_author =' 1. Ми викличемо до виконання запит:
Використання UNION
Мова SQL дозволяє об'єднувати результати декількох запитів за допомогою оператора UNION. Це надає зловмисникові можливість отримати несанкціонований доступ до даних.
Розглянемо скрипт відображення новини (ідентифікатор новини, яку необхідно відобразити, передається в параметрі id):
Якщо зловмисник передасть в якості параметра id конструкцію -1 UNION SELECT 1, username, password, 1 FROM admin. це викличе виконання SQL-запиту
Так як новини з ідентифікатором -1 свідомо не існує, з таблиці news не буде вибрано жодного запису, проте в результат потраплять записи, несанкціоновано відібрані з таблиці admin в результаті ін'єкції SQL.
Використання UNION + group_concat ()
У деяких випадках хакер може провести атаку, але не може бачити більше однієї колонки. У разі MySQL зломщик може скористатися функцією:
яка об'єднує кілька колонок в одну. Наприклад, для прикладу даного вище виклик функції буде таким:
Екранування хвоста запиту
Найчастіше, SQL-запит, схильний до даної уразливості, має структуру, що ускладнює або перешкоджає використанню union. наприклад скрипт
В даному прикладі, зловмисник може передати в скрипт параметр id зі значенням -1 UNION SELECT password FROM admin / *. виконавши таким чином запит
Розщеплення SQL-запиту
Для поділу команд в мові SQL використовується символ; (Крапка з комою), впроваджуючи цей символ в запит, зловмисник отримує можливість виконати кілька команд в одному запиті, однак не всі діалекти SQL підтримують таку можливість. MySQL, наприклад, не підтримує.
Наприклад, якщо в параметри скрипта
зловмисником передається конструкція, що містить крапку з комою, наприклад 12; INSERT INTO admin (username, password) VALUES ( 'HaCkEr', 'foo'); то в одному запиті будуть виконані 2 команди
і в таблицю admin буде несанкціоновано додано запис HaCkEr.
Методика атак типу впровадження SQL-коду
Пошук скриптів, вразливих для атаки
На даному етапі зловмисник вивчає поведінку скриптів сервера при маніпуляції вхідними параметрами з метою виявлення їх аномального поведінки. Маніпуляція відбувається всіма можливими параметрами:
- Даними, переданими через методи POST і GET
- Значеннями [HTTP-Cookie]
- HTTP_REFERER (для скриптів)
- AUTH_USER і AUTH_PASSWORD (при використанні аутентифікації)
Як правило, маніпуляція зводиться до підстановці в параметри символу одинарної (рідше подвійний або зворотного) лапки.
Аномальним поведінкою вважається будь-яка поведінка, при якому сторінки, одержувані до і після підстановки лапок, розрізняються (і при цьому не виведена сторінка про неправильному форматі параметрів).
Найбільш часті приклади аномального поведінки:
- виводиться повідомлення про різні помилки;
- при запиті даних (наприклад, новини або списку продукції) запитувані дані не виводяться взагалі, хоча сторінка відображається
і т. д. Слід враховувати, що відомі випадки, коли повідомлення про помилки, в силу специфіки розмітки сторінки, які не видно в браузері, хоча і присутні в її HTML-коді.
В даному випадку поле id має числовий тип, і його найчастіше не беруть в лапки. Тому «закавичіваніе» і заміна спецсимволов на escape-послідовності не проходить. В такому випадку допомагає перевірка типу; якщо змінна id не є числом, запит взагалі не повинен виконуватися.
Наприклад, на Delphi для протидії таким ін'єкціям допомагає код:
У разі помилки функція StrToInt викличе виключення EConvertError. і в його обробнику можна буде вивести повідомлення про помилку. Подвійне перетворення забезпечує коректну реакцію на числа в форматі $ 132AB (шістнадцяткова система числення). На стандартному Паскалі, що не вміє обробляти виключення, код трохи складніше.
Для PHP цей метод буде виглядати так:
Усічення вхідних параметрів
Для внесення змін до логіку виконання SQL-запиту потрібно впровадження досить довгих рядків. Так, мінімальна довжина впроваджуваної рядки в вищенаведених прикладах становить 8 символів ( «1 OR 1 = 1»). Якщо максимальна довжина коректного значення параметра невелика, то одним з методів захисту може бути максимальне усічення значень вхідних параметрів.
Наприклад, якщо відомо, що поле id в вищенаведених прикладах може набувати значень максимум 9999, можна «відрізати зайві» символи, залишивши не більше чотирьох:
Використання параметризованих запитів
Багато сервера баз даних підтримують можливість відправки параметрезованих запитів (підготовлені вираження). При цьому параметри зовнішнього походження відправляються на сервер окремо від самого запиту або автоматично екрануються клієнтської бібліотекою. Для цього використовуються
- на Perl - через DBI :: quote або DBI :: prepare;
- на Java - через клас PreparedStatement;
- на C # - властивість SqlCommand.Parameters;
- на PHP - MySQLi (при роботі з MySQL), PDO.
- на Parser - мова сам запобігає атаки подібного роду [джерело не вказано 595 днів].
У цій статті не вистачає посилань на джерела інформації.
Дивитися що таке "SQL ін'єкція" в інших словниках:
SQL-ін'єкція - Впровадження SQL коду (англ. SQL injection) один з поширених способів злому сайтів і програм, які працюють з базами даних, заснований на впровадженні в запит довільного SQL, в залежності від типу використовуваної СУБД і умов впровадження, ... ... Вікіпедія
SQL injection - Впровадження SQL коду (англ. SQL injection) один з поширених способів злому сайтів і програм, які працюють з базами даних, заснований на впровадженні в запит довільного SQL, в залежності від типу використовуваної СУБД і умов впровадження, ... ... Вікіпедія
SQL ін'єкція - Впровадження SQL коду (англ. SQL injection) один з поширених способів злому сайтів і програм, які працюють з базами даних, заснований на впровадженні в запит довільного SQL, в залежності від типу використовуваної СУБД і умов впровадження, ... ... Вікіпедія
Ін'єкція SQL - Впровадження SQL коду (англ. SQL injection) один з поширених способів злому сайтів і програм, які працюють з базами даних, заснований на впровадженні в запит довільного SQL, в залежності від типу використовуваної СУБД і умов впровадження, ... ... Вікіпедія
Microsoft SQL Server - Тип Реляційна СУБД Розробник Sybase, Ashton Tate, Microsoft ... Вікіпедія
Процедура - Процедура об'єкт бази даних, що представляє собою набір SQL інструкцій, який компілюється один раз і зберігається на сервері. Збережені процедури дуже схожі на звичайні процедури мов високого рівня, у них можуть бути ... ... Вікіпедія
Хакерська атака - у вузькому сенсі слова в даний час під словосполученням розуміється «Замах на систему безпеки», і схиляється скоріше до сенсу наступного терміну крекерскіх атака. Це сталося через спотворення сенсу самого слова «хакер». Хакерська ... ... Вікіпедія
- SQL ін'єкція. Джессі Рассел. Ця книга буде виготовлена в відповідності з Вашим замовленням за технологією Print-on-Demand. High Quality Content by WIKIPEDIA articles! SQL ін'єкція (англ. SQL injection) - один з ... Детальніше Купити за тисячу сто двадцять п'ять руб