Що таке SQL-ін'єкція? [MakeUseOf Пояснює]

Що таке SQL-ін'єкція? [MakeUseOf Пояснює]

Світ інтернет-безпеки рясніє відкритими портами, бекдорами, дірами в безпеці, троянськими програмами, хробаками, вразливостями брандмауера і безліччю інших проблем, які змушують нас всіх бути на ногах кожен день. Для приватних користувачів віруси і хробаки здаються найгіршими з можливих можливостей. Але для тих, хто працює з базою даних, SQL-ін'єкція є одним з найбільш руйнівних недоліків безпеки.

Бази даних надзвичайно цінні у сфері комп'ютерів. Вони необхідні для зберігання даних у вигляді пам'яті та відображення різних взаємозв'язків між точками даних. Тут, у MakeUseOf, у нас є безліч баз даних, присвячених різним завданням: одна для всіх наших статей, одна для нашої бази користувачів, одна для нашої програми винагород, і цей список можна продовжити. Що відбувається, коли наші бази даних зазнають зловмисної атаки або навіть знищення?

Коли у вас немає реального доступу до бази даних, SQL-ін'єкція є однією з найбільш помітних форм атаки. Продовжуйте читати, щоб дізнатися, що це таке і як це може бути настільки небезпечно.

Що таке SQL?

Щоб зрозуміти SQL-ін'єкцію, ви повинні спочатку зрозуміти, що таке SQL і як він пов'язаний з веб-сайтом. SQL, що означає мову структурованих запитів, є типом мови програмування, оптимізованим для керування табличними даними. Для всіх цілей і завдань це просто спосіб для програмістів взаємодіяти з базою даних і давати їй команди.

Кожен раз, коли з базою даних звертаються, існують команди SQL, які передаються і обробляються. Якщо ви подумаєте про всі випадки, коли з базою даних звертаються, ви прийдете до висновку, що це відбувається тільки за декількох обставин:

  • Коли нові дані повинні бути вставлені,
  • Коли поточні дані слід змінити,
  • Коли старі дані повинні бути вилучені,
  • Коли визначений фрагмент даних повинен бути знайдений і знайдений.

Кожен раз, коли необхідно виконати одну з цих дій, команда SQL виконується десь на сервері. Здебільшого програміст повинен визначити, коли і де ці команди SQL зустрічаються у вихідному коді. Однак є неминучі обставини, коли користувач може примусово маніпулювати базою даних - і ці можливості всюди навколо вас.

Ви коли-небудь заходили на сайт? Ви коли-небудь розміщували коментар до статті в блозі або відповідь у гілці форуму? Ви коли-небудь відправляли повідомлення в Facebook другу? Набрав лист у Gmail? Шукаєте сайт в Google? Кожен раз, коли ви бачите поле вводу на веб-сайті (ім'я користувача, пароль, пошуковий запит, вікно повідомлення тощо), Цей текст надсилається до бази даних і обробляється.

Тепер, якщо зловмисний користувач хотів втрутитися в базу даних, у нього не так багато варіантів. Одна з можливостей - отримати реальний фізичний доступ до сервера і знищити його на його базі. Але в іншому випадку для зловмисника найбільш розумно перехопити існуючу команду SQL при використанні поля введення, що змушує сервер виконувати команду, відмінну від тієї, яка була спочатку задумана.


Техніка SQL-ін'єкцій

Цей акт розкрадання існуючої команди SQL - це те, до чого відноситься впровадження SQL. Чому це називається ін'єкцією? Тому що перехоплення SQL-команди вимагає, щоб користувач вводив свій власний SQL-код при використанні поля введення. Це звучить дивно? Дозвольте мені проілюструвати це на прикладі.

Розгляньмо сторінку входу до MakeUseOf. Коли ви вводите своє ім'я користувача і пароль і натискаєте «Надіслати», ви змушуєте веб-сервер генерувати команду SQL, яка включає тільки що надану вами інформацію, тобто ваше ім'я користувача і пароль. База даних отримує інформацію, перевіряє правильність комбінації імені користувача і пароля, а потім надає вам належний доступ до інших областей сайту.

Тепер уявіть, що станеться, якщо зловмисний користувач не введе своє ім'я користувача і пароль, а замість цього введе команду SQL як своє ім'я користувача? Якщо код сервера не захищено належним чином, база даних отримає неправильне ім'я користувача (яке насправді є командою SQL) і фактично запустить його як команду.

І саме тому це називається ін'єкцією. Команда SQL вводиться в базу даних абсолютно законними способами, маніпулюючи нею так, що вона в кінцевому підсумку робить те, чого не повинна була робити.

Розширений приклад

Досі я описував впровадження SQL в термінах високого рівня, щоб кожен міг зрозуміти - навіть ті, хто не володіє знаннями в області програмування. У цьому розділі я збираюся навести реальний приклад того, як ця техніка можлива. Якщо ви новачок в SQL або якщо ви ніколи раніше не займалися програмуванням, то можете спокійно пропустити цей розділ.

При вході на веб-сайт ось один з можливих способів написання коду на SQL:

ВИБЕРІТЬ user_id
FROM users_db
ГДЕ username = «$ username» І пароль = «$ password»


По суті, команда просить базу даних повернути всі user_ids з таблиці users_db, які відповідають введеній комбінації імені користувача і пароля. Виглядає все добре і денді, вірно?

Припустимо, що для входу в систему були введені такі дані:

Ім'я користувача: ДевідПароль
: fubar ‘OR’ x ‘=’ x

Зверніть увагу, що поле пароля не починається і не закінчується апострофом. Коли сервер отримає цю спробу входу в систему, він візьме всі дані в поле пароля і помістить їх замість $ password в коді. Результуюча команда SQL виглядатиме так:


ВИБЕРІТЬ
   username = "David" І пароль = "fubar" АБО  x "=" x "


Коли сервер запускає цю команду, остання частина цієї команди SQL завжди буде повертати true. Це означає, що зловмисник може ввести будь-яке ім'я користувача і миттєво отримати доступ до цього облікового запису, оскільки логін буде працювати незалежно від того, чи правильно він отримав пароль.

Звичайно, вхід у чужий обліковий запис є досить легким порушенням, якщо порівнювати його з усіма іншими можливими спробами злому: видаленням цілих баз даних, знищенням всіх даних або навіть крадіжкою даних у базах даних.

Професійні веб-розробники все краще і краще запобігають подібним хитрощам, але час від часу ви будете чути, що компанія зазнала збитків від атаки SQL-ін'єкцій. Коли це відбувається, тепер ви знаєте, що це означає і як це можливо.