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

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

<?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'])

Зачем мне хотеть объявить переменную для меня?

Ответы [ 6 ]

27 голосов
/ 19 сентября 2008

Проверьте ваш php.ini для настройки register_globals. Вероятно, он включен, вы хотите выключить его.

Почему я хочу, чтобы переменная была объявлена ​​для меня?

Нет. Это ужасный риск для безопасности. Это делает глобальные переменные Environment, GET, POST, Cookie и Server (руководство PHP) . Это несколько зарезервированных переменных в PHP.

4 голосов
/ 19 сентября 2008

Похоже, register_globals в вашем php.ini является виновником. Вы должны выключить это. Это также огромная угроза безопасности.

Если вы используете общий хостинг и не можете изменить php.ini, вы можете использовать ini_set () , чтобы отключить register_globals.

2 голосов
/ 19 сентября 2008

, если у вас нет доступа к php.ini , ini_set('register_globals', false) в сценарии php не будет работать (переменные уже объявлены) .htacces s с:

php_flag register_globals Off

иногда может помочь.

2 голосов
/ 19 сентября 2008

Установите register_globals на off, если я понимаю ваш вопрос. Смотри http://us2.php.net/manual/en/language.variables.predefined.php

1 голос
/ 19 сентября 2008

В какой-то момент в истории РНР они сделали спорное решение отключить register_globals по умолчанию, как это было огромным риском для безопасности. Это дает любому человеку возможность вводить переменные в ваш код, создавать немыслимые последствия! Эта "особенность" даже удалена в php6

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

1 голос
/ 19 сентября 2008

Вы можете проверить, правильно ли объявлены все переменные, установив уровень логарифмирования PHP в PHP.INI на

error_reporting  =  E_ALL 

Ваш фрагмент кода теперь должен генерировать УВЕДОМЛЕНИЕ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...