• Для початку визначимося з тим, що даній статті я в жодному разі не закликаю кого-або зламувати чиї-або інтернет-ресурси, використовуючи описані нижче методи.
    Основна мета статті – продемонструвати користувачеві важливість теми захисту даних в Інтернеті на прикладі сайту, не захищеного належним чином. В якості способу атаки на сайт буде використовуватися, мабуть, найпоширеніший метод злому сайту - SQL-ін'єкція.
    Для початку визначимося з тим, що всі без винятку сучасні об'ємні, складні сайти будуються на основі бази даних. Робота з даними, що зберігаються в базі даних вашого сайту, здійснюється за допомогою структурного мови запитів SQL.
    SQL-ін'єкція - техніка впровадження у вихідний SQL-запит певного коду (не порушує структури самого запиту) з метою отримання доступу до даних, що зберігаються в БД.
    Таким чином при певних умовах, пов'язаних, як правило, з відсутністю в коді і запитах сайту функцій, спрямованих на захист даних, зломщик може за допомогою SQL-ін'єкції прочитати вміст будь-яких таблиць, а також видалити, змінити або додати дані, отримати можливість читання та/або записи локальних файлів і виконання довільних команд на що атакується сервері. Не будемо довго зупиняти на теорії і перейдемо до дій.
    Отже, для початку познайомимося з таким поняттям, як передача даних методом GET. Чи Не помічали ви, подорожуючи по сторінках нескінченного Інтернету, що посилання, за яким ви подорожуєте, часто мають вигляд типу:
    www.хххххх.ru/index.php?що-то = чому-&еще_что-то = еще_чему-те,
    де на місці моїх умовних «що-то» і «чому-» стоять всілякі значення.
    Так от, знайте, що url, виглядають таким чином, містять у собі певну інформацію, а саме: за знаком питання слід спочатку хмарно (її ім'я), а потім = її значення. Знак & відокремлює змінні один від одного.
    А робиться все це лише для того, щоб сторінка, на якій ви звертаєтесь, могла змінюватися залежно від цих змінних, тобто їх значення передаються тим самим методом GET в код сторінок сайту, там ці значення обробляються, а на основі отриманих результатів і виходить наша веб-сторінка.
    Але тільки вдумайтеся! Адже ніхто не може заборонити вам взяти і вручну підправити цей url, зробити його таким, як потрібно вам, після цього натиснути клавішу enter і відправити дані цього url-а на обробку серверу БД!! Саме тут і виникає можливість впровадження SQL-ін'єкції.
    Отже, почнемо. Ми маємо сайт, який на підставі параметр id, переданого методом GET, виймає певні дані з БД і формує на їх основі нашу сторінку. Ось код цього SQL-запиту, який обробляє наші дані з url-а:
    $result3 = mysql_query('SELECT * FROM raspisanie WHERE cat=$id').
    Якщо перекласти на російську мову, запит виконує вибірку всіх даних з бази даних raspisanie, де поле cat=$id. По суті все, що в запиті йде за нашою змінної $id, яку ми передаємо з url-а, нам вже не важливо, і пізніше я поясню чому. Тепер розберемося з самим url-ом. Нехай спочатку він виглядає так:
    www.хххххх.ru/index.php?id=3.
    тобто ми передаємо цим url-запитом параметр id=3, і сторінка формується на основі цього параметра, значить він поміщається в наш SQL-запит і виходить, що з бази даних витягають всі дані з таблиці raspisanie, де поле cat=$id=3. А тепер перейдемо до найцікавішого. Припустимо, ми знаємо, що в базі даних атакованого сайту в таблиці users зберігаються логін і пароль від адміністраторської зони сайту - в полях login та password відповідно. І тоді, просто змінивши наш url наступним чином:
    www.хххххх.ru/index.php?id =3+union+select+1,2,login,password,5,6,7 +from+user/*
    - сторінка помістить всю цю велику змінну в наш запит, який стане виглядати як
    $result3 = mysql_query('SELECT * FROM raspisanie WHERE cat=3 union select 1,2,login,password,5,6,7 from user/*').
    І, обробивши такий новий запит, який ніяк не порушує структуру таблиць бази ДАНИХ, сервер сам поверне нам, крім звичайної інформації, що відповідає значенню id=3, ще і логін з паролем від сайту!
    Щоб було зовсім зрозуміло, я переведу наш новий «чарівний запит»:
    «Вибрати всі дані з таблиці raspisaniе, де поле cat=3, а також зробити інший запит: вивести, крім отриманих даних, значення логіна і пароля з таблиці users».
    Числа 1, 2 і т.д. є довільними і використовуються для збереження структури запиту, і кількість таких значень визначається підбором - до тих пір, поки число таких значень не стане рівною кількістю значень, які виводяться з бази даних за замовчуванням.
    Імена таблиці users і значення полів для логіна і пароля також визначаються підбором, адже погодьтеся, скрізь вони мають приблизно однакові назви. І, нарешті, символи в кінці нашого url-а «/*» служать для відкидання хвоста початкового запиту в разі його присутності, щоб він не порушив структуру запиту запровадженого.
    Отже, ми наочно, на прикладі успішного впровадження SQL-ін'єкції, ознайомилися з одним з можливих способів злому сайту.
    Не нехтуйте питаннями захисту інформації свого сайту і спіть спокійно!