2011-03-23 2 views
0

Я пытаюсь прочитать исходный код Claroline, чтобы узнать из их кодирования.
В файле index.php, в первой строке кода, они пишутВключить уязвимость файла

unset($includePath); // prevent hacking 

Вы можете увидеть полный исходный код Claroline из here.

Они отметили, что линия используется для предотвращения взлома ..
я понятия не имею, почему они должны UNSET $includePath пока переменная никогда не определяется до этой линии ..

Какова цель этой линии действительно ли код, и какой тип взлома они имеют в виду?

ответ

1

Я не смотрел на источник себя, но немного поисков дает следующий вид консультирования безопасности:

Claroline mambo.inc.php and postnuke.inc.php "includePath" file include


Обратите внимание, что это зависит от register_globals быть включена, что:

  • не по умолчанию: он отключен по умолчанию в течение очень длительного времени (с PHP 4.2.0)
  • - это плохая практика (небезопасная ^^, поскольку она позволяет любому вводить переменные в скрипты PHP; Именно поэтому этот один, в этом случае, снят с охраной «чтобы предотвратить взлом»)
1

Эта переменная не может быть установлена ​​в коде до этой точки, но если register_globals включен, ее можно установить в URL-адресе злоумышленником.

1

Это звучит, как вы в основном ищете учебную информацию, так вот дите объяснение того, что register_globals имел обыкновение делать .. почему он был там ... и почему это уже не так (и вы не должны его включать).

Переменные приходят через $_GET и $_POST (или $_REQUEST) массивов ... что register_globals сделал, было сделать программирование проще, принимая все элементы этих массивов, и положить их в глобальное пространство имен - то есть, что делает " регулярные "глобальные переменные из них - так что $_GET['includes'] можно было бы легко назвать просто $includes.

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

Это было ужасно неуверенно - потому что, если ленивый программист не потрудился правильно инициализировать все переменные (например, если установить, включен ли $ include, а затем использовать его, прежде чем он будет правильно инициализирован), любая из этих неверно инициализированных переменных может быть настроен на то, что хотел хакер. PHP был довольно новым, и многие любители писали код - часто также делали такие вещи, как забывание правильно избегать переменных в SQL-запросах. Таким образом, один недостаток безопасности, как правило, легко отслеживать с другим, позволяя хакеру (или автоматическому сценарию) получать более глубокие и более глубокие уровни доступа.

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

0

héhé Это длинная история.

На самом деле в начале «наивной» версии Claroline, безопасность не была на самом деле целью ;-)

$ INCLUDEPATH был вычислить в инициализации для стро всех других путей Claroline.

С серверами, настроенными с регистром global = on, это был очень простой способ взломать.

ie: include ($ includePath. "/ Lib/pager.lib.php");

Эта простая строка была «патчем».

as require '../../../../inc/claro_init_global.inc.php';is включено во все.

Заключение: Claroline - это старый код, запущенный в php4, с скриптом, который вызывается для php3, безопасным (сейчас), но старым. Стиль не является хорошим вдохновением для «современного» кода :-)

Безопасный кламолин был отличным приключением -) Матье выполнил большую часть коррекции.

Я помню, что они работают более одного месяца, чтобы быть совместимым с регистром global off (я имею в виду это 7 лет назад)

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