PHP:GET-данные автоматически объявляются как переменные
Вопрос
Возьмите этот код:
<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
}
if ($action) {
echo $action;
}
else {
echo 'No variable';
}
?>
А затем получить доступ к файлу с помощью? Action = test есть ли какой -нибудь способ предотвратить автоматическое объявление действий $ get?Кроме, конечно, добавления
&& !isset($_GET['action'])
Почему я хочу, чтобы переменная была объявлена для меня?
Решение
Проверьте свой php.ini на наличие register_globals
параметр.Вероятно, он включен, вы хотите его отключить.
Почему я хочу, чтобы переменная была объявлена для меня?
Вы не знаете. Это ужасная угроза безопасности.Это делает переменные Environment, GET, POST, Cookie и Server глобальными. (руководство PHP).Это несколько зарезервированные переменные в PHP.
Другие советы
Выглядит как register_globals
виноват ваш php.ini.Вам следует отключить это.Это также огромный риск для безопасности.
Если вы используете общий хостинг и не можете изменить php.ini, вы можете использовать ini_set() чтобы отключить Register_globals.
Если я правильно понял ваш вопрос, отключите параметр Register_globals.Видеть http://us2.php.net/manual/en/language.variables.predefine.php
если у вас нет доступа к php.ini, а ini_set('register_globals', false)
в сценарии PHP не будет работать (переменные уже объявлены) .htaccessс:
php_flag register_globals Off
иногда может помочь.
Вы можете проверить, правильно ли объявлены все переменные, изменив уровень журнала PHP в PHP.INI на
error_reporting = E_ALL
Теперь ваш фрагмент кода должен генерировать УВЕДОМЛЕНИЕ.
В какой-то момент истории PHP было принято спорное решение отключить Register_globals по умолчанию, поскольку это представляло огромную угрозу безопасности.Это дает любому возможность вводить переменные в ваш код, создавая немыслимые последствия!Эта «функция» даже удалена в php6.
Если вы заметили, что он включен, обратитесь к администратору, чтобы отключить его.