Заставить код работать с отключенным register_globals - PullRequest
10 голосов
/ 09 августа 2008

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

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

Ответы [ 4 ]

5 голосов
/ 09 августа 2008

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

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

3 голосов
/ 11 августа 2008

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

2 голосов
/ 17 августа 2008

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

0 голосов
/ 09 августа 2008

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

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

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

...