Кто-нибудь может привести несколько примеров того, что register_globals
?
И считается ли global $ user_id;
регистром глобальным?
Если у вас есть register_globals=on, все, что передается через GET, POST или COOKIE, автоматически отображается как глобальная переменная в коде, это может иметь последствия для безопасности.
Т.е. вы нажимаете на url test.php?access_level=100 и у вас будет $access_level = 100 в PHP.
Когда вы делаете глобальную переменную $somevar, вы создаете свою собственную глобальную переменную, что обычно не представляет большой проблемы.
Параметр register_globals определяет, как вы получаете доступ к форме, серверу и среде. переменные.
Вы можете получить доступ к атрибуту формы без глобальных массивов (GET[], POST[] & REQUEST[] )
пример: http://www.example.com/one .php?myinput=abc
Вы можете получить доступ напрямую в one.php
echo $myinput; // abc
Вы должны получить доступ ко всем атрибутам только через глобальные массивы.
пример: http://www.example.com/one.php?myinput=abc
Вы должны получить доступ в one.php
echo $_GET['myinput']; //abc
Директива register_globals
:
register_globals
— это внутренняя настройка PHP, которая регистрирует элементы массива $_REQUEST
как переменные. Если вы отправляете значение в форме через POST
или GET
, значение этого ввода будет автоматически доступно через переменную в скрипте PHP, названную в честь имени поля ввода. .
Другими словами, если вы отправили форму, содержащую текстовое поле username
, выражение ($username === $_POST['username'])
в самом начале скрипта вернет true
.
Его дурная слава связана с тем, что он открывает множество дыр в безопасности, особенно для людей, которые с точки зрения безопасности придерживаются чего-то меньшего, чем строгий стиль кодирования.
Классический пример:
if(user_is_admin($user))
{
$authorized = true;
}
if($authorized)
{
// let them do anything they want
}
Теперь, если вы посетили этот скрипт в веб-браузере и на сервере была включена 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
}