Использование Register Globals
Q: Форма не отображает данные.
Q: Не видно параметров передаваемых скрипту.
Q: Переменная $page пустая, хотя я передаю do.php?page=2
Q: Что делать, если хостер выключил register_globals
Возможно, самое заметное изменение в PHP, это то что, изменилось значение по умолчанию для директивы register_globals. С версии 4.2.0 ее значение OFF.
Это сделано для облегчения написания безопасных скриптов. При разработке достаточно сложных проектов, когда число используемых переменных велико, очень легко можно допустить использование неинициализированной переменной, которая при register_globals=On может быть передана скрипту извне хакером.
<?php if (authenticated_user()) { $authorized = true; } if ($authorized) { include "/highly/sensitive/data.php"; } ?>
Если 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 - переменные закаченных файлов
Помните, что если вы используете предустановленные массивы не видны внутри функции, по этому необходимо действовать следующим образом:
function myfunction() { GLOBAL $HTTP_POST_VARS; print $HTTP_POST_VARS["page"]; }
2. Использование суперглобальных массивов
Начиная с версии 4.1.0, PHP предоставляет дополнительный набор предопределенных массивов, содержащих переменные web-сервера (если они доступны), окружения и пользовательского ввода. Эти новые массивы являются особыми, поскольку они автоматически глобальны--то есть, автоматически доступны в любой области видимости.
- $_GET - переменные переданные методом GET
- $_POST - переменные переданные методом POST
- $_COOKIE - значения Cookie
- $_SESSION - переменные сессий
- $_FILES - переменные закаченных файлов
Суперглобальные массивы не имеют недостатка описанного выше:
function myfunction() { print $_POST["page"]; }
3. Использование функции import_request_variables()
Функция позволяет импортировать GET/POST/Cookie переменные.
Синтаксис:
bool import_request_variables ( string типы [, string префикс])
Типы могут быть:
- G - GET
- P - POST
- C - Cookies
При указании типов регистр не имеет значения. Вы можете передавать сразу несколько типов, но при этом переменные будут перекрываться.
Пример импортирующий GET, а поверх них POST переменные:
import_request_variables("gP", "rvar_"); echo $rvar_foo;
См. еще extract
Возможно, что из будущих версий PHP register_globals будет исключен вообще.
Оставить комментарий
Комментарии
Если ее включить пто она сама их импортирует
P.S. интересно, тэги пропустит ??? :) это я про КРАСНЫЙ