Как получить переменные $ _GET в PHP - PullRequest
3 голосов
/ 11 ноября 2010

Я работаю над приложением, созданным несколько лет назад, которое недавно перестало работать правильно.Старый программист сказал, что он может обращаться к $_GET или $_POST переменным, не читая их из $_GET[] array, но через register_globals

Я хочу спросить: каковы различные способы доступа к * 1007?* переменные без использования $_GET[] массива (например, прямые пути?) и, если известно, как я могу проверить, использует ли это приложение какую-либо из них?

Заранее спасибо

РЕДАКТИРОВАТЬ : другие способы, которые я запомнил, был register_globals, а не magic_quotes.Кроме того, я не хочу использовать его , а скорее определить, использовался ли он и в последнем обновлении сервера не рекомендуется (что может объяснить, почему приложение перестало работать правильно)

РЕДАКТИРОВАТЬ : Мой английский сегодня ужасен.Как я объяснил в одном из ответов: Мне нужно проверить, использовал ли оригинальный программист какой-то неясный и / или устаревший метод получения переменных из строки запроса в PHP, поэтому приложение значений, с которым теперь работает приложение, неверно / не инициализировано

ВАЖНОЕ РЕДАКТИРОВАНИЕ : import_request_variables снято со стола, оно не используется.Все $_ массивы тоже находятся вне стола, потому что последнее обновление не сломало бы их (=> они все еще работают).Как я могу определить, какие переменные инициализируются с помощью register_globals?

ДАЙТЕ ДРУГОЕ РЕДАКТИРОВАНИЕ : Я нашел это:

foreach ($_POST as $k => $v) {
  eval("\$".$k." = '".$v."';");
}
foreach ($_GET as $k => $v) {
  eval("\$".$k." = '".$v."';");
}

Возможно, он был сломан одним из последние обновления (макс. 1 неделю назад)?

Ответы [ 5 ]

4 голосов
/ 11 ноября 2010

Вы имеете в виду через Регистрировать глобальные переменные , а не Магические кавычки ... Кстати, глобальные регистры - чистое зло никогда не использовать их (и они устарели с PHP5.3.0)!

Редактировать: Если вы хотите проверить, использует ли приложение регистр Globals, попробуйте найти значения $_GET в качестве переменных.Например, для index.php?id=123 попробуйте поискать $id в коде PHP.Если вы обнаружите, что это не означает, что скрипт использует регистры Globals, но если $id происходит из ниоткуда и никогда не инициализируется / не устанавливается, это хороший (плохой!) Признак того, что приложение использует регистры Globals ...

2 голосов
/ 11 ноября 2010

$_SERVER["QUERY_STRING"] даст вам необработанную строку GET.

Тем не менее, это звучит как проблема, которую следует исправить в корне, а не с помощью другой переменной.

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

Страница Отключение магических кавычек в PHPРуководство показывает способ «исправить» поступающие данные в зависимости от того, активирована ли функциональность или нет.Это не очень эффективно для огромных объемов данных, но должно выполняться в повседневной работе.

2 голосов
/ 11 ноября 2010

У вас также есть $ _ REQUEST , magic_quotes (устарело) влияет только на содержимое переменных, а не на способы их захвата.

Также см. import_request_variables , оригинальный кодер, возможно, использовал его, чтобы получить содержимое переменной GET и вставить ее в другую переменную, на которую впоследствии будет ссылаться.

1 голос
/ 11 ноября 2010

Регистровые глобалы - это ужасная особенность, на которую часто полагаются старые программы PHP.

Когда глобальные регистры включены, PHP будет смотреть на переменные GET и POST и «преобразовывать» их в обычные имена переменных - например, *Код 1003 * будет доступен в коде как $myvar.

. Помимо других проблем, это позволяет хакерам легко взломать программу, угадав, какие другие имена переменных мог использовать программист.Поэтому функция глобальных регистров была отключена по умолчанию на долгое время, теперь она официально устарела и будет полностью удалена в будущей версии.

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

1 голос
/ 11 ноября 2010

Проблема, вероятно, PHP register_globals.Эта опция делает $_GET['some_var'] или ее эквивалентную $_POST версию доступной как $some_var автоматически.Это устарело, и вам определенно не следует его использовать, но другой программист мог использовать их в этом приложении.

...