Подтвердить что ты не робот

Выполнение работы кода с отключением register_globals

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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