Заставить код работать с отключенным Register_globals

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

  •  08-06-2019
  •  | 
  •  

Вопрос

Я унаследовал некоторый устаревший PHP-код, который был написан еще тогда, когда его использование было стандартной практикой. register_globals (Начиная с PHP 4.2.0 эта директива по умолчанию отключена, выпущена 22.апрель 2002 г.).

Теперь мы знаем, что включение этой функции вредно для безопасности.Проблема в том, как мне найти все места в коде, где мне нужно использовать $_GET или $_POST?Моей единственной мыслью было настроить отчеты об ошибках, чтобы предупреждать о неинициализированных переменных, а затем протестировать каждую часть сайта.Есть ли более простой способ?Придется ли мне тестировать каждый путь кода на сайте или PHP будет выдавать предупреждение для каждого файла?

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

Решение

Если вы установите для отчета об ошибках значение E_ALL, в журнале ошибок будет предупреждение о неопределенных переменных, дополненных именем файла и номером строки (при условии, что вы ведете журнал в файл).Однако он предупредит только в том случае, если встретит неопределенную переменную, поэтому я думаю, вам придется протестировать каждый путь кода.Запуск php из командной строки также не помогает.

Существует инструмент отладки xdebug, я его не пробовал, но, может быть, он может оказаться полезным?

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

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

Вы можете вручную «подделать» глобальный эффект регистра, но добавить некоторую безопасность.(Частично я взял это из форка osCommerce под названием xoops)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

Хотя вам хотелось бы настроить его, чтобы сделать ваш код более безопасным, по крайней мере, добавив глобальные переменные конфигурации (например, путь и базовый URL-адрес) в список плохих глобальных переменных.

Вы также можете использовать его, чтобы легко составить список всех используемых переменных get/post, чтобы в конечном итоге заменить все вхождения, скажем, $return_url, на $_REQUEST['return_url];

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

Я также нашел следующий пост, который может быть полезен - Перейти к последнему сообщению на странице

Я добавлю к этому еще, если никто не нашел ответа, но теперь мне нужно успеть на поезд.

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