Використання register globals

Q: Форма не відображає дані.
Q: Чи не видно параметрів переданих скрипту.
Q: Змінна $ page порожня, хоча я передаю do.php? Page = 2
Q: Що робити, якщо хостер вимкнув register_globals

Можливо, саме помітне зміна в PHP, це те що, змінилося значення за замовчуванням для директиви register_globals. З версії 4.2.0 її значення OFF.

Це зроблено для полегшення написання безпечних скриптів. При розробці досить складних проектів, коли число використовуваних змінних велике, дуже легко можна допустити використання неініціалізованої змінної, яка при register_globals = On може бути передана скрипту ззовні хакером.

Якщо register_globals = on, то змінній $ authorized може стати TRUE, навіть не якщо функція authenticated_user () поверне FALSE.

Тепер розглянемо методи боротьби:

1. Використання встановлених масивів:

  • $ HTTP_GET_VARS - змінні передані методом GET
  • $ HTTP_POST_VARS - змінні передані методом POST
  • $ HTTP_COOKIE_VARS - значення Cookie
  • $ HTTP_SESSION_VARS - змінні сесій
  • $ HTTP_FILES_VARS - змінні закаченних файлів

Пам'ятайте, що якщо ви використовуєте встановлені масиви не помітні всередині функції, тому необхідно діяти наступним чином:

2. Використання суперглобальних масивів

Починаючи з версії 4.1.0, PHP надає додатковий набір визначених масивів, що містять змінні web-сервера (якщо вони доступні), оточення і призначеного для користувача введення. Ці нові масиви є особливими, оскільки вони автоматично глобальні - тобто, автоматично доступні в будь-якій області видимості.

  • $ _GET - змінні передані методом GET
  • $ _POST - змінні передані методом POST
  • $ _COOKIE - значення Cookie
  • $ _SESSION - змінні сесій
  • $ _FILES - змінні закаченних файлів

Суперглобальні масиви не мають нестачі описаного вище:

3. Використання функції import_request_variables ()

Функція дозволяє імпортувати GET / POST / Cookie змінні.

Типи можуть бути:

При вказівці типів регістр не має значення. Ви можете передавати відразу декілька типів, але при цьому змінні будуть перекриватися.

Приклад імпортує GET, а поверх них POST змінні:

Можливо, що з майбутніх версій PHP register_globals буде виключений взагалі.

Схожі статті