Телепузики – сила. Покемони – могила. Про РНР

« Мене задовбали трамваї і колії, кондуктори дибіли і профілакторії». Цей уривок із пісні «Олені» дуже гарно описав мої відчуття, коли я вкотре прочитав статтю на одному шанованому порталі про шкідливість застосування мови РНР. Знову вискочила цифра 43% ( саме стільки РНР-коду містить вразливості ). Та хіба винна та балярина, що їй мішає те, що мішає поганому танцюристу. От там використовують РНР і у них є недоліки і звісно тут винна мова програмування, а не програміст. Як противагу можна сказати, щоб відкрили код Windows і тоді чітко буде видно, чи винна мова програмування? Прочитавши одну мудру книжку, мудрий код писати не навчишся. Потрібно постійно пильнувати про всі події пов’язані із РНР, виявленні недоліки, підходи до побудови програмного коду. У даному матеріалі я спробую навести базові помилки із безпеки, які роблять початківці.
Найбільш груба помилка це використання register_globals. У конфігураціному файлі php.ini є такий рядок register_globals On, він так виставлений по замовчуванню, але не у всіх версіях. Параметр потрібно виставити у значення register_globals Off . У першому випадку доступ до змінних проходить по імені змінної. If ($user==”user” || $pass==”pass”) $log=1; Завантаживши адресу http://andr.ua/test.php?user=user&pass=pass змінна $log отримає значення 1 і виконається якийсь код у залежності від значення цієї змінної. Даний механізм можна обійти ввівши таке http://andr.ua/test.php?log=1. При register_globals Off значення змінних необхідно брати із масиву $HTTP_*_VARS. І такий спосіб взлому вже не пройде. У даному випадку $user = $_GET [“user”] при використанні методу GET і $user = $_POST[“user”] при POST .
Якщо створюваний об’єкт буде містити поле для вводу інформації, то цю інформацію необхідно завжди фільтрувати. Найбанальніше це можна застосувати функції escapeshellarg (); , htmlspecialchars (); та інші споріднені. Я рекомендую використовувати бібліотеку ООН Forms із phplib. Це незалежний клас, що служить для створення форм і провірки коректності введених даних.
Нехай маємо наступний код include($page);. При параметрі allow_url_fopen On користувачу дозволено виконати на сервері довільний РНР код, що прийде до нього з іншої адреси. Тобто, нехай test.php містить вище наведений код. Програміст це використовує наступним чином test.php?page=main. Тоді як я це використаю так test.php?page=http://andr.ua//badscript.php і торба тоді наступить їхньому сайту.
Тим же include (); можна підключати до об’єкту кілька тих самих файлів. Щоб цього уникнути рекомендую завжди використовувати include_once (); Це те саме що і include (); тільки тут файл прикріплюється до об’єкту тільки одни раз.
Недоліком, на мою думку, мови РНР є необов’язковість оголошення типу використовуваної змінної. Це може призвести до зловживань. По замовчуванню змінні мають символьний тип. А це означає, що як значення я можу їй передати якусь url . Нагадую, що тип змінної вказується наступним чином settype ($Change, type) . Обережно слід себе поводити і при перетворенні типів змінної. Наприклад
$Change = “2 Andriy Andrukhiv”;
settype ($Change,integer);
echo (gettype($Change));
echo ($Change);
Програмка в результаті виведе integer та 2. А мала б виникнути помилка. Для коректного перетворення типу все, що йде після 2 потрібно відкинути. Інтерпретатор знайшов на початку стрічки цифру 2 і використовує її. І тут потрібно слідкувати, щоб він не відкинув якусь важливу інформацію.
Нерозуміння механізмів функціонування компонентів РНР призводить до породження помилок коду. Детальніше про безпеку РНР можна прочитати за адресою http://php.net/manual/en/security.php

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <h1> <h2> <h3> <h4> <h5> <h6> <address> <em> <strong> <code> <del> <cite> <acronym> <blockquote> <q> <sub> <p> <br> <pre> <ul> <ol> <li> <dl> <dt> <dd> <a> <b> <u> <i> <table> <tr> <td> <th> <div> <sup><hr> <img>
  • Glossary terms will be automatically marked with links to their descriptions.
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
  .d8888b.                  8888888b.   888    d8P   888     888  888       888            888 
d88P Y88b 888 "Y88b 888 d8P 888 888 888 888 888
.d88P 888 888 888 d8P 888 888 888 888 888
8888" 88888b.d88b. 888 888 888d88K 888 888 88888b. 888 888 .d88888
"Y8b. 888 "888 "88b 888 888 8888888b 888 888 888 "88b 888 .88P d88" 888
888 888 888 888 888 888 888 888 Y88b 888 888 888 888 888888K 888 888
Y88b d88P 888 888 888 888 .d88P 888 Y88b Y88b. .d88P 888 d88P 888 "88b Y88b 888
"Y8888P" 888 888 888 8888888P" 888 Y88b "Y88888P" 88888P" 888 888 "Y88888


Enter the code depicted in ASCII art style.

© Інформаційні технології. Аналітика , Рідна Мережа