Подтвердить что ты не робот

Что такое register_globals в PHP?

Может кто-нибудь дать некоторые примеры того, что register_globals?
И global $user_id; считается регистром глобальным?

4b9b3361

Ответ 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.