Приветствую всех. Копался на php.net, но так и не нашел ответ на свой вопрос. Может ли суперглобальный массив $_FILES после загрузки того или иного файла не вернуть некоторые значения, такие как: $_FILES['userfile']['name'] или $_FILES['userfile']['mime'] Я просто думаю вот о чем, нужно ли проверять эти переменные на существование с помощью isset() или же они всегда существуют? Если злоумышленник, к примеру, отправил файл но не передаст его название, которое должно содержаться здесь $_FILES['userfile']['name'], то эта переменная будет пустой или не существовать? И еще вопрос, переменная $_FILES['userfile']['size'] содержит реальный размер файлов или лучше проверять размер с функцией filesize() ?
Да, нужно. Тебе на скрипт-приемник файлов могут просто прямо обратиться или левый запрос послать. Лучше перестраховаться. Проверяй и то и то и сравнивай. Вообще, ко всему, что приходит извне относись как к атаке. Будь параноиком. Каждый пользователь - враг. Каждый запрос - попытка нагнуть твой сервер. И тогда у тебя не будет проблем с безопасностью. Звучит, может странновато, но рукастый засранец - это как пуля в голову. Неважно, сколько у тебя посетителей. Одного рукастого засранца хватит, чтобы стало грустно.
Разве такой проверки недостаточно Код (Text): if (isset($_FILES['userfile']['error']) AND is_array($_FILES['userfile']['error'])) Проверять то можно, но зачем делать лишнюю проверку, если, к примеру, PHP сам генерирует $_FILES['userfile']['size'], лишняя проверка - лишняя нагрузка на сервер. (для меня очень важна производительность системы, можно конечно везде всякие проверки пихать, но не хочется этого делать, если они там не нужны) Просто я хотел бы точно знать как этот механизм работает, в гугле ничего не нашел.
данный суперглобальный массив это результат любезной обработки пхп-машиной входящего потока данных из которого выделены файлы, сложены в файловую систему и описаны самым необходимым для первичной обработки образом. все стандартные поля существуют всегда для каждого принятого файла. проверять функцией файлсайз то что приняла пхп-машина это лишнее действие так как она уже сделала за вас файлсайз.