2009-03-30 2 views
0

У меня есть сайт администратора, который я скопировал на новый сервер, чтобы протестировать ошибки и поставить вживую, а также некоторые другие сайты.Стоит ли исправлять систему администратора, на которой был REGISTER GLOBALS?

У администратора, похоже, есть РЕГИСТРАЦИЯ GLOBALS и используется для большинства 300 php-файлов.

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

Или быть счастливым, что я исправлю каждую страницу, добавив в нее новую функцию в будущем?

Регистрирует ли Globals проблемы с кодом, который был очищен, если мы не исправим все сразу? Я предполагаю, что это возможно, поскольку $ user_id может быть задан любым глобальным.

ответ

0

Register_Globals is небезопасный и не должен использоваться. Если бы я был вами, я бы переписал код или само приложение с нуля. Однако, если это админ-система, и никто не знает ее URL-адреса, и поэтому только сам администратор может получить к нему доступ, тогда вы должны быть в порядке, не меняя его (просто убедитесь, что его URL остается секретным)

+0

Обфускация не является защитой. –

+0

register_globals не более фундаментально небезопасен, чем mysql_query(). Конечно, вы можете создавать дыры в безопасности, злоупотребляя им, но это относится ко всему. – cletus

+0

@Cletus, согласен, но есть высокая вероятность того, что вы оставите одну из этих лазеек в своем коде при использовании reg_globals. Поэтому я бы рекомендовал переписать его, если вы не уверены или, по крайней мере, просмотрите весь код –

0

Это может привести к некоторым очень серьезным проблемам безопасности, это зависит от того, как оно закодировано.

Например:

<?php 
// $loggedin comes from $_SESSION['loggedin'] 
if($loggedin) 
{ 
    echo 'Loggedin!'; 
} 
else 
{ 
    echo 'Please login'; 
} 
?> 

Основная проблема здесь в том, что скрипт не проверяет, где $ LoggedIn приходит. Так что, если бы я сделал script.php? Loggedin = 1, я бы выполнил вход. Видя, что есть ~ 300 файлов PHP, было бы сложно все проверить.

Так что храните это (очень) плохую идею. Даже это вы использовали бы .htaccess для блокировки доступа, это, вероятно, приведет к проблемам в будущем (IE-хост IE с настройкой REGISTER_GLOBALS отключен) и путаница.

0

Не переписывайте всю систему. Если система работает, и вы небрежно обновляетесь по ходу дела, вам не нужно начинать с нуля.

Я бы взвесил важность обращения к глобальным регистрам на основе чувствительности информации.

Если это хорошо построенная система, вы должны уметь видеть, какие переменные используются на сайте, и просто сделать их доступными в верхней части страниц. Будьте осторожны с любыми функциями, которые извлекают свои данные через глобальные $ this, $ that;

Мое голосование, если данные важны для защиты, заключается в выполнении работы.

1

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

+0

У этого есть призыв, но работа над системами администрирования CMS, которые будут перекодированы, всегда занимает намного больше времени, чем планировалось после того, как найдены недокументированные настройки – tristanbailey

0

Это зависит от вашего вполне определенного места.Просто назвать несколько: политика безопасности

  1. компании
  2. Стоимость переписать
  3. Важность применения
  4. воздействия на других частях приложения.
  5. и т.д.
1

Я бы отключить register_globals из php.ini, и поставить кодовый блок в верхней части каждого скрипта, который извлекает переменные из _REQUEST $, $ _GET или $ _POST, что-то вроде:

$nVars = extract($_GET, EXTR_SKIP); 

Приведенный выше код будет регистрировать переменные с тем же именем, что и ключ в переданном массиве. Это полезно для быстрого реорганизации старого кода REGISTER_GLOBALS, но вы должны быть осторожны. Прочитайте следующий отрывок из документации PHP extract():

Не используйте экстракт() на ненадежных данных, как пользовательский ввод ($ _GET, ...). Если вы, к примеру, если вы хотите запустить старый код, который полагается на register_globals временно, сделать , что вы используете один из не-перезапись extract_type значения , такие как EXTR_SKIP и быть в курсе, что вы должны извлечь в тот же порядок , который определяется в переменных_order внутри php.ini.

Смежные вопросы