Странное условие If на php

toxic steel
На сайте с 28.12.2007
Offline
175
1003

Коллеги, мне сейчас приходится кое-в-чём копаться, индусить мал-по-малу :) дошёл до такого вот куска:

if ($_FILES['userfile']['tmp_name']) {

if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile)) {
echo 'Проблема: невозможно переместить файл в каталог назначения';
exit;
}
}
else {
echo 'Проблема: возможна атака через загрузку файла. Файл: ';

echo $_FILES['userfile']['name'];
exit;
}

От неожиданности аж погуглил по фрагменту кода, оказалось - это чуть ли не из книжки какой-то обучающей пример, примеров с именно такой логикой - на каждом втором найденном сайте.

Вопрос: в чём здесь логика else? С какой стати оно таким образом "возможность атаки" детектит?

Есть отличные, недорогие рекламные места на агрофоруме (http://farmerforum.ru/viewtopic.php?t=1725)! Клуб истинных ценителей денег (http://coinshunter.ru/).
[umka]
На сайте с 25.05.2008
Offline
456
#1

Видимо, оно считает, что элемента 'name' без элемента 'tmp_name' быть не должно, и если такое происходит, значит, кто-то постит кривые данные с целью сделать что-то противоестественное. Только и всего.

Лог в помощь!
Aisamiery
На сайте с 12.04.2015
Offline
293
#2

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

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#3

Я бы условие оставил, а вот else убрал. Пусть это уже хакеры думаю, чего это файл не загружается.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
S
На сайте с 23.05.2004
Offline
316
#4

name - имя файла

tmp_name - временный файл после загрузки.

Теоретически tmp_name может не быть (или null) если файл не удалось по какой то причине сохранить. Так что просто проверка в лоб перед перемещением.

Это просто подпись.
toxic steel
На сайте с 28.12.2007
Offline
175
#5
Stek:
Теоретически tmp_name может не быть (или null) если файл не удалось по какой то причине сохранить. Так что просто проверка в лоб перед перемещением.

Дык вот именно, мне поэтому и не понятно - сфига ли "возможна атака" то?

S
На сайте с 30.09.2016
Offline
469
#6
toxic steel:
Дык вот именно, мне поэтому и не понятно - сфига ли "возможна атака" то?

Эта уязвимость называется "null byte filename".

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий