2015-02-01 2 views
1
<?php 
echo "test"; 
    echo $city; 
    ?> 

Это позволяет отгонять город от URL-адреса, даже если на странице нет кода . Я предполагаю, что это глобальная переменная ...Как отключить глобальную переменную?

<?php 
     unset($GLOBALS[_SERVER]); 
     echo $city; 
     ?> 

Я начал и разрушила сеанс, чтобы убедиться, это не в сессии. Если я изменю переменную, она не выйдет из строя. Если я изменю url? City = Boston to? City = Chicago, то он обновляется.

$ city = $ _GET ["city"]; не существует на странице ... остальная часть страницы пуста.

+0

Это просто означает, что вы не показываете нам весь ваш код! Просто покажите свой ** полный код **! Я думаю, что у вас есть: '$ city = $ _GET [" city "];' это в вашем коде! – Rizier123

+0

Нет, если это не невидимо. :) – user3005687

+0

'$ city' никогда не определялся! Какой результат вы получаете от этого скрипта? Также добавьте отчет об ошибках в верхней части вашего файла (ов): ' 'И сообщите нам, если вы получите какие-либо ошибки. – Rizier123

ответ

1

Скорее всего, причина для $city уже имеет значение register_globals установка есть ON. Что означает, что каждый GET, POST и некоторые другие переменные регистрируются как глобальные переменные в вашем скрипте. Например, если вы откроете свой скрипт как script.php?city=New+York, у вас будет переменная $city, определенная в вашем коде со значением «Нью-Йорк».

Если вы не хотите этого поведения, вам необходимо отключить register_globals в вашем php.ini.

Подробнее о register_globals здесь http://php.net/manual/en/security.globals.php

+0

Получил это спасибо! https://www.youtube.com/watch?v=A-XVLlDhlWw – user3005687

4

Поведение, которое вы описываете звуки как опции конфигурации PHP register_globals включена. Эта опция приводит к тому, что все переменные GET и POST (а также файлы cookie) должны быть созданы как глобальные переменные во время запуска сценария. Это огромная проблема с безопасностью и, как таковая, по умолчанию не работает с PHP 4.2.0 (выпущена в апреле 2002 года) и не может быть включена вообще в PHP 5.4 и более поздних версиях (выпущен в марте 2012 года). Тот факт, что он включен для вашей системы, вызывает беспокойство, поскольку это указывает на то, что вы используете PHP 5.3 или ранее, который больше не получает исправления безопасности!

Чтобы отключить его, обновите PHP до поддерживаемой версии.

Если это невозможно, отредактируйте файл конфигурации PHP, найдите строку, в которой установлено register_globals = On (или = 1), и удалите его. Этот вариант не был рекомендован более десяти лет; он не должен быть включен.

(Там нет безопасного способа отключить register_globals во время выполнения. Отключение его с помощью ini_set() не работает, так как он вступает в силу до начала сценария, и нет никакого способа, чтобы безопасно удалить все переменные, которые она создает, как и иногда эти переменные могут перезаписывать глобальные системы. Единственный безопасный подход - полностью отключить его.)

+0

Ничего себе, если это действительно так, это безумие, я никогда ничего не слышал об этом. Я даже не знал, что это возможно/существует. – Rizier123

+0

Спасибо ... просто используя этот сервер временно при разработке ... он бесплатный с хостингом. – user3005687

Смежные вопросы