2008-09-19 8 views
9

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

<?php 
if (isset($_POST['action']) && !empty($_POST['action'])) { 
    $action = $_POST['action']; 
} 

if ($action) { 
    echo $action; 
} 
else { 
    echo 'No variable'; 
} 
?> 

А затем получить доступ к файлу с действием = тест Есть ли способ предотвращения $ действие автоматическую декларируется на ГЭТ ? За исключением, конечно, добавления

&& !isset($_GET['action']) 

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

ответ

27

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

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

You don't. Это ужасный риск для безопасности. Он делает глобальные переменные окружения, GET, POST, Cookie и Server (PHP manual). Это несколько из reserved variables в PHP.

+0

Спасибо за ответ, это действительно то, что я искал. Но мой пример - единственное, что влияет на register_globals? – Eikern 2008-09-19 13:47:54

4

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

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

1

Вы можете проверить, все ли переменные объявляются правильно поворотом PHP логарифмического уровня в php.ini для

error_reporting = E_ALL 

фрагмент кода должен теперь генерировать уведомления.

1

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

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

2

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

php_flag register_globals Off 

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