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

 
     
 

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

nectarin
228
    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, и одной потенциальной проблемой у вас будет меньше.

5
Просмотров: 1302
     

Новости inPHP.org Новости inPHP.org
30.12.2011   С наступающим Новым Годом!
Команда inPHP.org поздравляет всех посетителей сайта проекта с наступающим Новым Годом! Вероятно, многие участники проекта заметили некоторое затишье в уходящем году. Поверьте, в следующем всё будет несколько иначе!
31.12.2010   С Новым Годом!
Уважаемые коллеги, коллектив проекта inphp.org искренне поздравляет вас с наступающим Новым Годом!
27.05.2010   Технические работы.
По техническим причинам возможны кратковременные перебои в работе сайта проекта в период с 27.05.2010 по 1.06.2010.
02.03.2010   Доступ участников к разработке тестирований.
В тестовом режиме запущен функционал, позволяющий участникам проекта разрабатывать собственные тестирования. Разработанные сообществом тестирования не имеют ограничений официальной аккредитации и в любое время доступны любому участнику.
 
Содействуют развитию Содействуют развитию
Участники проекта Участники проекта
ctapbiu_mabp
60
    ctapbiu_mabp ctapbiu_mabp

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

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

Специализации: 0
vvquad
120
    vvquad vvquad

Специализации: 0
zuzzeron
100
    zuzzeron zuzzeron

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

УровеньПользователи
7742%
62376,5%
52075,7%
41945,3%
336510%
2401,1%
13509,6%
отсутствует218059,8%