В недавній статті про те, як зламувати сайти, схильні до SQL-Інжект. я розповідав про програму SQLMAP. Під час написання статті (точніше переведення і тестування методу) мене неприємно здивувало кількість сайтів, в тій чи іншій мірі схильним до SQL-ін'єкцій.
З огляду на популярність SQLMAP і подібних їй інструментів, а також велика кількість сайтів, схильних до SQL-ін'єкцій, я вирішив написати кілька порад початківцям програмістам на PHP, як захистити базу даних від злому.
Для виявлення, чи схильна скрипт уразливості, я буду використовувати SQLMAP, робити це буду не на локалхосте, а на реальному хостингу. Для прискорення процесу тестування різних варіантів скриптів, я буду їх редагувати прямо на хостингу (Як редагувати файли прямо на хостингу). Поїхали.
Те, що передається параметру t прямо відправляється в sql-запит.
У ньому набраний свідомо вразливий скрипт:
Всього одна нова рядок позбавила від всіх проблем:
Пам'ятайте, що екранувати (як і фільтрувати) потрібно абсолютно всі дані, що приходять "з того боку", тобто від користувача. Навіть куки, навіть ті, які, здавалося б, жорстко прописані: наприклад, в випадаючому списку три опції - і обрана опція відправляється на сервер. Здавалося, як зумовлена величина може допомогти в SQL-ін'єкції? Все дуже просто, сучасні браузери, навіть без спеціальних плагінів, дозволяють редагувати HTML-код на льоту. Тобто ви очікуєте одне з трьох значень, а отримуєте хитро сконструйований SQL-запит.
Ще одна поширена помилка - початківці програмісти думають, що є сторінка "для всіх" - це ті, які відповідають за роботу сайту. А є сторінки тільки для веб-майстра: Адаменко, технічні скрипти і т.п. І ці програмісти лінуються (або не вважають за потрібне) екранувати / фільтрувати дані. Це груба помилка - потрібно екранувати і фільтрувати всюди!
2. Фільтрація даних і приведення до очікуваного типу
Ви звернули увагу, що замість $ _GET [ 't'] я використовую filter_input (INPUT_GET, 't'). Я це роблю не просто так.
Якщо ми очікуємо отримати тільки число, то використовувати приблизно так filter_input (INPUT_GET, 't', FILTER_SANITIZE_NUMBER_INT)
Якщо ми хочемо, щоб були відкинуті всі теги і все спеціальні символи, то ми можемо використовувати filter_input (INPUT_POST, 't', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW) в результаті чого видаляються всі теги, видаляються і кодуються спеціальні символи.
Давайте візьмемо наш найперший вразливий скрипт і спробуємо в ньому фільтрувати дані таким чином:
Тобто параметр вразливий до сліпої ін'єкції.
5. Перевіряйте все змінний на можливість Інжект
Змінні, про які часто забувають:
6. Використовуйте mod_security (або інший фаєрвол для веб-додатків).
mod_security не вирішить за вас усіх проблем, якщо ви використовуєте скрипти, що рясніють помилками і дірками. Але, тим не менш, він здорово підсилить будь-який сервер. Рекомендую мої ж статті:
висновок
У цій статті я виклав свої знання, що дозволяють мені уникати SQL-ін'єкцій при програмуванні на PHP. Я не претендую на істину в останній інстанції, тому буду радий почути про ваші власні методи і прийоми.
Схожі теми
Злом віддаленого хоста за допомогою Cypher. Вітаю! У цій темі я продемонструю злом віддаленого хоста за допомогою програми Cypher. Вона дозволить нам додати корисне навантаження в виповнюється.
THC-Hydra: дуже швидкий зломщик мережевого входу в. Програма hydra підтримує величезну кількість служб, завдяки своїй швидкості і надійності вона завоювала заслужену вдячність серед тестерів.
Як встановити AMD APP SDK в Kali Linux. Ця інструкція з серії про те, Як встановити GLRX, AMD APP SDK, CAL ++ і Pyrit в Kali Linux. Ідея в тому, щоб встановити коректні драйвера в Kali.
Пентестінг VoIP з Viproy Привіт, форум! Періодично, так як тема VoIP мені близька, я шукаю інструменти для тестування на проникнення своїх серверів. Та й просто поба.
Основи Linux - командний рядок і файлова с. Перш ніж ви зможете освоїти Kali Linux, ви повинні вільно орієнтуватися в основних поняттях системи Linux. Уміння працювати з Linux буде дуже по.