Обробка запитів за допомогою PHP

Усередині PHP-скрипта існує декілька способів діставання доступу до даних, переданим клієнтом по протоколу HTTP. До версії PHP 4.1.0 доступ до таких даних здійснювався по іменах переданих змінних. Таким чином, якщо, наприклад, було передано first_name=Nina, то усередині скрипта з'являлася змінна $first_name із значенням Nina. Якщо потрібно було розрізняти, яким методом були передані дані, то використовувалися асоціативні масиви \$HTTP_POST_VARS і \$HTTP_GET_VARS, ключами яких були імена переданих змінних, а значеннями – відповідно значення цих змінних. Таким чином, якщо пара first_name=Nina передана методом GET, то

$HTTP_GET_VARS["first_name"]="Nina"".

Використовувати в програмі імена переданих змінних безпосередньо небезпечно. Тому було вирішено починаючи з PHP 4.1.0 задіювати для звернення до змінних, переданих за допомогою HTTP-запросов, спеціальний масив – $_REQUEST. Цей масив містить дані, передані методами POST і GET, а також за допомогою HTTP cookies. Це суперглобальний асоціативний масив, тобто його значень можна набути в будь-якому місці програми, використовуючи як ключ ім'я відповідної змінної (елементу форми).

Приклад

Figure: Приклад зовнішнього вигляду форми.  

Cтворена форма для реєстрації учасників заочної школи програмування. Тоді у файлі action.php, оброблювальному цю форму, можна написати наступне:

<?php $str = "Здрастуйте

".$_REQUEST["first_name"]. "

".$_REQUEST["last_name"]."! <br>";

$str .="Вы вибрали для вивчення курс по

".$_REQUEST["kurs"];

echo $str; ?>

Тоді, якщо у форму ми ввели ім'я «Вася», прізвище «Голопупкін» і вибрали серед всіх курсів курс по PHP, на екрані браузеру отримаємо таке повідомлення:

Здрастуйте, Вася Голопупкін!

Ви вибрали для вивчення курс по PHP

Після введення масиву $_REQUEST масиви $HTTP_POST_VARS і $HTTP_GET_VARS для однорідності були перейменовані в $_POST і $_GET відповідно, але самі вони з ужитку не зникли з міркувань сумісності з попередніми версіями PHP. На відміну від своїх попередників, масиви $_POST і $_GET стали суперглобальними, тобто доступними безпосередньо і усередині функцій і методів.

Наведемо приклад використання цих масивів. Допустимо, нам потрібно обробити форму, що містить елементи введення з іменами first_name, last_name, kurs (наприклад, форму, приведену вище). Дані були передані методом POST, і дані, передані іншими методами, ми обробляти не хочемо. Це можна зробити таким чином:

<?php $str = "Здрастуйте

".$_POST ["first_name"]."

".$_POST ["last_name"] ."! <br>";

$str .= "Ви вибрали для вивчення курс по ".

$_POST["kurs"];

echo $str; ?>

Тоді на екрані браузеру, якщо ми ввели ім'я «Вася», прізвище «Голопупкін» і вибрали серед всіх курсів курс по PHP, побачимо повідомлення, як в попередньому прикладі:

Здрастуйте, Вася Голопупкін!

Ви вибрали для вивчення курс по PHP

Для того, щоб зберегти можливість обробки скриптів раніших версій, ніж PHP 4.1.0, була введена директива register_globals, що вирішує або забороняє доступ до змінних безпосередньо по їх іменах. Якщо у файлі налаштувань PHP параметр register_globals=On, то до змінних, переданих серверу методами GET і POST, можна звертатися просто по їх іменах (тобто можна писати $first_name). Якщо ж register_globals=Off, то потрібно писати

$_REQUEST["first_name"]

або

$_POST["first_name"]

$_GET["first_name"]

$HTTP_POST_VARS["first_name"]

$HTTP_GET_VARS["first_name"].

З точки зору безпеки цю директиву краще відключати (тобто register_globals=Off). При включеній директиві register_globals перераховані вище масиви також міститимуть дані, передані клієнтом.

Інколи виникає необхідність взнати значення якої-небудь змінної оточення, наприклад метод, що використався при передачі запиту або IP-адрес комп'ютера, що відправив запит. Отримати таку інформацію можна за допомогою функції getenv(). Вона повертає значення змінної оточення, ім'я якої передане їй як параметр.

<? getenv("REQUEST_METHOD");

// поверне використаний метод

echo getenv ("REMOTE_ADDR");

// виведе IP-адресу користувача

// що послав запит

?>

Як ми вже говорили, якщо використовується метод GET, то дані передаються додаванням рядка запиту у вигляді пар «имя_переменной=значение до URL-адресу ресурсу». Все, що записане в URL після знаку питання, можна отримати за допомогою команди

getenv("QUERY_STRING");

Завдяки цьому можна по методу GET передавати дані в якому-небудь іншому вигляді. Наприклад, вказувати лише значення декількох параметрів через знак плюс, а в скрипті розбирати рядок запиту на частини або можна передавати значення всього одного параметра. В цьому випадку в масиві $_GET з'явиться порожній елемент з ключем, рівним цьому значенню (всьому рядку запиту), причому символ «+», що зустрівся в рядку запиту, буде замінений на підкреслення «_».

Методом POST дані передаються лише за допомогою форм, і користувач (клієнт) не бачить, які саме дані вирушають серверу. Аби їх побачити, хакер повинен підмінити нашу форму своїй. Тоді сервер відправить результати обробки неправильної форми не туди, куди потрібно. Аби цього уникнути, можна перевіряти адресу сторінки, з якою були послані дані. Це можна зробити знову ж таки за допомогою функції getenv():

getenv("HTTP_REFERER");








Дата добавления: 2016-04-02; просмотров: 1095;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.