Разделы публикаций

 
     
 

Опасность объединения суперглобальных массивов

nectarin
217
    nectarin nectarin
Сергей NectarIn Новиков
Специализации: 1

Иногда разработчики для удобства используют объединение суперглобальных массивов в один, например:
$input array_merge($_GET$_POST$_COOKIE$_FILES$_SERVER$_ENV, (array) @ $_SESSION);

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

Ещё большую опасность данный метод проявляет при загрузке файлов. Не все знают, что стандартными методами POST и GET на сервер можно отправлять полноценные ассоциативные массивы (в том числе многоуровневые). В частности, вот такая HTML-форма:


<form method="post">
<input type="text" name="file[name]" value="Похищаемый .htaccess" />
<input type="text" name="file[error]" value="0" />
<input type="text" name="file[tmp_name]" value=".htaccess" />
</form>

...при отправке на сервер сымитирует описание загруженного файла file из массива $_FILES (приведены только наиболее часто используемые ключи). Причём "файл" будет помечен успешно загруженным. Если обработчик формы использует итоговый объединённый массив, включающий массивы $_POST и $_FILES (в любом порядке), достаточно не отправлять никаких файлов и в форме указать интересующий файл на целевом сервере — сервер скорее всего не распознает подделку. Что именно произойдёт с этим "загруженным файлом" — зависит от исполняемого PHP-скрипта. Может быть, сбой обработки, а может быть — вывод на экран пользователя. Кстати, можно пробовать указывать и удалённые файлы...
В целом, данный приём (объединение суперглобальных массивов) встречается нечасто и, как правило, не ведёт к уязвимости. Тем обиднее обнаружить, что данная уязвимость имела место и была использована эрудированным злоумышленником. Помните об этом и получайте информацию о загруженных файлах только из массива $_FILES, и одной потенциальной проблемой у вас будет меньше.

2
Просмотров: 387
     

Новости inPHP.org Новости inPHP.org
27.05.2010   Технические работы.
По техническим причинам возможны кратковременные перебои в работе сайта проекта в период с 27.05.2010 по 1.06.2010.
02.03.2010   Доступ участников к разработке тестирований.
В тестовом режиме запущен функционал, позволяющий участникам проекта разрабатывать собственные тестирования. Разработанные сообществом тестирования не имеют ограничений официальной аккредитации и в любое время доступны любому участнику.
19.02.2010   Введён общий рейтинг участника.
В рамках программы развития проекта введён параметр общего рейтинга участника. Соответствующие изменения внесены в правила проекта. Рейтинг - один из показателей, которые будут активно использоваться в готовящемся к запуску функционале. Первое из нововведений - доступ участников к системе разработки собственных тестирований и возможность неограниченного использования тестирований, разработанных сообществом, будет запущено в течение марта 2010 года.
 
Содействуют развитию Содействуют развитию
webdev
198
    webdev webdev
Константин
Специализации: 2
Участники проекта Участники проекта
rusk
120
    rusk rusk

Специализации: 0
alexandrpvz_test
140
    alexandrpvz_test alexandrpvz_test

Специализации: 0
l0ve
60
    l0ve l0ve

Специализации: 0
olegator2k
60
    olegator2k olegator2k

Специализации: 0
misterx
20
    misterx misterx

Специализации: 0
 
Статистика проекта Статистика проекта
Всего пользователей: 3050
Из них аккредитовано: 1207
Были сегодня: 17

УровеньПользователи
7481,6%
62157%
51585,2%
41665,4%
32909,5%
2411,3%
12889,4%
отсутствует184360,4%