Вопрос

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

Я хочу спросить: что разные способы доступа $_GET Переменные без использования $_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 неделю назад)?

Это было полезно?

Решение

Вы имеете в виду сквозь Регистрировать глобал и не Магические цитаты... BTW регистр глобал это чистое зло никогда Используйте их (и они устарели как PHP 5.3.0)!

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

Другие советы

$_SERVER["QUERY_STRING"] даст вам сырье Get String.

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

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

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

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

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

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

С помощью регистрируются глобал, включенные, PHP будет смотреть на переменные GET и POST и «продвигать» их на нормальные имена переменных - например, $_GET['myvar'] будет доступно в коде, как $myvar.

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

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

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

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