Page 13 - 4636
P. 13
Подібна зручність доступу до змінних може здатися досить привабливою, але перед тим як просто
включити register_globals, непогано було б розібратися з причинами, з яких команда
розробників РНР прийняла рішення за замовчуванням відключити register_globals.
Дуже зручно мати прямий доступ до змінних, проте він створює умови для програмних помилок,
які можуть скомпрометувати безпеку ваших сценаріїв. При такому способі автоматичного
перетворення змінних форми в глобальні змінні, подібні розглянутим, не можна відокремити створені
вами змінні від неперевірених змінних, які надходять безпосередньо від користувача.
Якщо початкові значення не присвоєні, то користувачі ваших сценаріїв зможуть передавати змінні
та значення у вигляді змінних форми, які перемішуються з вашими власними змінними. Якщо ви
обираєте більш зручний короткий стиль доступу до змінних, то повинні дотримуватися обережності
при призначенні своїм власним змінним початкових значень.
Середній стиль передбачає зчитування змінних форм з масивів $_POST, $_GET і $_REQUEST.
Детальний опис всіх змінних форм міститься або в масиві $_POST, або в масиві $_GET. Який масив
використовується, залежить, відповідно, від того, який метод було обрано для передачі форми - POST
або GET. Крім того, поєднання всіх даних, переданих за допомогою методу POSTабо GET, доступне
через масив $_REQUEST.
Якщо форма була відправлена за допомогою методу POST, то дані, поміщені в поле tireqty, будуть
збережені в $_POST['tireqty ']; якщо ж форма була передана за допомогою методу GET - то
$_GET['tireqty'].І в тому і в іншому випадку дані будуть доступні в $_REQUEST
['tireqty'].
Ці масиви належать до категорії так званих суперглобальних.
Розглянемо приклад створення спрощених копій змінних.
Для копіювання значення однієї змінної в іншу служить операція присвоювання, для позначення
якої в мові РНР використовують знак рівності (=). Наведена нижче рядок коду створює нову змінну з
ім'ям $tireqty і копіює в неї вміст $_POST ['tireqty'] :
$tireqty = $_POST ['tireqty'];
Оскільки наступний сценарій не генерує ніяких вихідних даних, немає різниці місце його
розміщення відносно дескриптора <html> та інших HTML-дескриптори, з яких починається сторінка.
Зазвичай цей блок розміщується на самому початку сценарію, щоб потім його було легше знайти.
<?php
// створення коротких імен змінних
$tireqty « $_POST [ ' tireqty ' ] ;
$oilqty = $_POST [ ‘oilqty ' ] ;
$sparkqty= $_POST [‘sparkqty ' ] ;
?>
Цей код створює три змінні $tireqty, $oilqty і $sparkqty і поміщає в них дані, які були
передані з допомогою методу POST-форми. Щоб цей сценарій виконував хоч деякі помітні дії,
необхідно вставити наступні рядки в нижню частину РНР-сценарію:
echo '<р>Замовлено: </р>';
echo $tireqty.' покришок<br/>';
echo $oilqty.' пляшок масла<br/>';
echo $sparkqty.' свічок запалювання<br />';
На цій стадії, як правило, не перевіряється вміст змінних.
З точки зору безпеки відправка в браузер даних, введених користувачем - ризикована справа. Вхідні
дані слід фільтрувати. Фільтрація даних буде розглянутапізніше.
10