2010-02-19 3 views
2

HI allPHP устаревший код?

Запуск PHP версии 5.2.11 и нам был предоставлен сайт, который, как нам сказали, работает на более ранней версии (возможно, 4).

У нас нечетная проблема, где несколько страниц, которые имеют кучу форм, которые обновляют MySql не работают. Проблема заключается в том, что переменные, используемые в скрипте обновления, не определяются в любом месте в php перед рукой. например.

UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'" 

Теперь, если мы изменим его ..

$form_firstname = $_POST['form_firstname']; 
UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'" 

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

import_request_variables 

заявления, но нада.

Может кто-нибудь придумать что-нибудь, что будет выключены по умолчанию в новом сервере, которые могут вызвать это, или же это переменные должны быть объявлены где-нибудь?

Приветствия muchly

+0

Какой домен вы, что ваш сайт был на? * evil grin * Нет, серьезно: это результат либо разработчика noob, либо ленивого разработчика, либо разработчика, раздавленного невежественными менеджерами. Вероятно, комбо из всех em. Теперь вы (или ваш клиент) платите цену старой неряшливости. – anddoutoi

ответ

8

Это register_globals. НЕ использовать это; это gaping security hole.

+0

Я придерживаюсь этого комментария. Проверьте это: http://php.net/manual/en/security.globals.php – Nacho

+0

Ах Гоча, так что нам нужно вручную швырнуть $ _POST-х в тогда? – amjags

+4

@Stu, не только это, вам нужно 1) избежать их; или 2) использовать подготовленные заявления. – chelmertz

-2

Я думаю, вам нужно установить resister_global = на в php.ini

+1

Не делайте этого, это абсолютно опасно! – middus

+0

Да - это глупо. – symcbean

+1

... и misspelt – symcbean

0

я надеюсь, что вы не используете что-то серьезное. Этот код открыт для всех видов вторжений, инъекций и взломов. У меня есть два ответа для вас. Быстрый & грязный: включить register_globals. Альтернатива: найдите кого-нибудь, чтобы переписать приложение с нуля или найти лучший.

+0

Ничего серьезного, и мы избегаем запросов. Например, код отключен. Привет, однако. – amjags

1

Как указано в другом месте, его потому, что исходный код был register_globals включен - что очень плохая практика.

Как быстро взломать можно добавить код в верхней части каждой страницы (в глобальном масштабе):

extract($_GET); extract($_POST); 

... который имеет почти такой же эффект, но на основе сценария по-скриптом , Но ТОЛЬКО, чтобы сайт работал, пока вы правильно реализуете код. Обратите внимание, что это не единственная проблема с неконтролируемым вводом кода в SQL-запросы - это рецепт для DISASTER.

Вы должны переписывать код как ....

$form_firstname = mysql_real_escape_string($_POST['form_firstname'], $db_handle); 
$id = mysql_real_escape_string($_POST['id'], $db_handle); 
$qry="UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'"; 

C.

+0

Cheers symcbean, да, мы отметили, что риск вставки для кода был просто любопытным в вопросе register_globals. TBH похоже, что им нужно переделать много вещей. Благодарю. – amjags