Может кто-нибудь дать некоторые примеры того, что register_globals
?
И global $user_id;
считается регистром глобальным?
Что такое register_globals в PHP?
Ответ 1
Директива register_globals
:
register_globals
- внутренний параметр PHP, который регистрирует элементы массива $_REQUEST
как переменные. Если вы передадите значение в форме, через POST
или GET
, значение этого ввода будет автоматически доступно через переменную в PHP скрипт, названной в имени имени поля ввода.
Другими словами, если вы отправили форму, содержащую текстовое поле username
, выражение ($username === $_POST['username'])
в самом начале script вернет true
.
Его известность объясняется тем, что он открывает множество дыр в безопасности, особенно для людей, которые следуют за чем-то меньшим, чем строгий стиль кодирования с точки зрения безопасности.
Классический пример:
if(user_is_admin($user))
{
$authorized = true;
}
if($authorized)
{
// let them do anything they want
}
Теперь, если вы посетили этот script в веб-браузере, а на сервере был register_globals
, вы можете просто добавить ?authorized=1
к URL-адресу, и божественный режим будет включен!
Ключевое слово global
:
global
- ключевое слово имеет мало общего с register_globals.
Вот пример его использования:
$foo = 'bar';
baz();
function baz()
{
echo $foo; // PHP warns you about trying to use an uninitialized variable
// and nothing is output (because $foo doesn't exist here)
}
buzz();
function buzz()
{
global $foo; // Enables the use of $foo in this scope
echo $foo; // Prints 'bar' to screen
}
Ответ 2
Все, упоминающие GET
, POST
, REQUEST
, COOKIE
, влияют на register_globals=on
.
Я просто пишу это, чтобы вы знали, что -
$_SESSION
будет затронут, а также из-за register_globals=on
.
http://php.net/manual/en/security.globals.php
Это означает - если вы делаете следующее:
$_SESSION[x] = 123;
$x = 'asd';
echo $_SESSION[x];
Выход будет asd
.
И это вызовет серьезные проблемы с безопасностью и ошибки. Недавно я столкнулся с такой плохой проблемой при использовании хостинга Hostgator. По умолчанию у них есть register_globals=on
.
Ответ 3
Когда у вас есть register_globals = on, все, что передается через GET или POST или COOKIE, автоматически становится глобальной переменной в коде, это может иметь последствия для безопасности.
т.е. вы нажимаете url test.php? access_level = 100, и у вас будет $access_level = 100 в PHP.
Когда вы делаете глобальный $somevar - вы создаете свою собственную глобальную переменную, которая обычно не является большой проблемой.
Ответ 4
Параметр register_globals контролирует доступ к форме, серверу и среде. переменные.
register_globals = On:
Вы можете получить доступ к атрибуту формы без глобальных массивов (GET [], POST [] и REQUEST [])
пример: http://www.example.com/one.php?myinput=abc
Вы можете получить доступ непосредственно в one.php
echo $myinput; // abc
register_globals = Выкл.:
Вам нужно получить доступ ко всем атрибутам только глобальным массивам.
пример: http://www.example.com/one.php?myinput=abc
Вам нужно получить доступ в one.php
echo $_GET['myinput']; //abc
Ответ 5
Как я понимаю, если вы включили глобальные регистры, все, что передается в GET или POST, автоматически преобразуется в переменную в PHP.
например:
http://www.domain.com/vars.php?myvar=123
без какого-либо дальнейшего кодирования это автоматически превратится в переменную, доступную для остальной части вашего php-кода.
$myvar //with a value of 123
С зарегистрированными глобальными значениями ВЫКЛ данные, переданные через GET или POST, НЕ автоматически преобразуются в переменную, а вам нужно запросить его, используя Superglobals $_GET, $_POST и $_REQUEST и т.д.
http://php.net/manual/en/security.globals.php содержит дополнительную информацию о последствиях для безопасности.
Другие могут отреагировать на меня, если я ошибаюсь.
изменить
по отношению к вашему вопросу re global $user_id;
, это не создает "глобального" в смысле "register_globals". Он просто изменяет область действия переменной в PHP-коде.
Информацию о области re-области см. в разделе http://php.net/manual/en/language.variables.scope.php
Ответ 6
Глобальные переменные в php - это переменные, которые всегда доступны. Они также известны как суперглобалы. Они встроены в переменные, которые всегда доступны независимо от области действия.
В PHP существует девять суперглобальных переменных. Некоторые из них имеют отношение к этому обсуждению.
-
$_REQUEST
-
$_POST
-
$_GET
-
$_COOKIE
Теперь сосредоточьтесь на суперглобале $_REQUEST
. Он используется для сбора данных после отправки HTML-формы пользователем с использованием метода POST
.
$_POST
и $_REQUEST
можно использовать взаимозаменяемо. Но $_REQUEST
также содержит $_GET
и $_COOKIE
вместе с $_POST
, поэтому вы никогда не уверены, что ваши данные поступают из веб-формы.
Теперь, как указано @Tim register_globals
, это внутренний параметр PHP, который регистрирует элементы массива $_REQUEST
в качестве переменных. Он также известен как flag
в вашей настройке php. Обычно он задается в файле конфигурации PHP, который известен как php.ini
. Этот параметр может иметь два значения.
- "on"
- "выключено".
Значение "on" означает, что PHP автоматически создаст глобальные переменные для многих переменных сервера, а также параметры строки запроса. Это нехорошо и представляет угрозу безопасности.
Ответ 7
Регистрировать глобалы:
register_globals Эта функция приводит к тому, что данные, переданные в PHP script через файлы cookie или GET и POST-запросы, становятся доступными как глобальные переменные в script.
Значение по умолчанию: "0"
Сменный: PHP_INI_PERDIR
register_globals зависит от директивы variables_order.
ПРИМЕЧАНИЕ:
Эта функция была DEPRECATED с PHP 5.3.0 и удалена с PHP 5.4.0.