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

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

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

9.08.2008 05:13:55
4 ОТВЕТА
РЕШЕНИЕ

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

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

5
9.08.2008 08:11:55

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

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

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

0
9.08.2008 07:01:06

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

3
11.08.2008 01:08:56

Вы можете вручную «подделать» эффект глобальных регистров, но добавить некоторую безопасность. (Я частично взял это из форка 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];

2
17.08.2008 17:36:54