PHP:GET-данные автоматически объявляются как переменные

StackOverflow https://stackoverflow.com/questions/101850

  •  01-07-2019
  •  | 
  •  

Вопрос

Возьмите этот код:

<?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.

Если вы заметили, что он включен, обратитесь к администратору, чтобы отключить его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top