За последние 24 часа нас посетил 17801 программист и 1718 роботов. Сейчас ищут 977 программистов ...

Могут ли некоторые значения $_FILES не существовать

Тема в разделе "PHP для новичков", создана пользователем Борис животное, 14 апр 2015.

  1. Борис животное

    Борис животное Активный пользователь

    С нами с:
    25 янв 2015
    Сообщения:
    11
    Симпатии:
    0
    Приветствую всех.
    Копался на php.net, но так и не нашел ответ на свой вопрос.

    Может ли суперглобальный массив $_FILES после загрузки того или иного файла не вернуть некоторые значения, такие как:
    $_FILES['userfile']['name'] или $_FILES['userfile']['mime']

    Я просто думаю вот о чем, нужно ли проверять эти переменные на существование с помощью isset() или же они всегда существуют?
    Если злоумышленник, к примеру, отправил файл но не передаст его название, которое должно содержаться здесь $_FILES['userfile']['name'], то эта переменная будет пустой или не существовать?

    И еще вопрос, переменная $_FILES['userfile']['size'] содержит реальный размер файлов или лучше проверять размер с функцией filesize() ?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да, нужно. Тебе на скрипт-приемник файлов могут просто прямо обратиться или левый запрос послать. Лучше перестраховаться.
    Проверяй и то и то и сравнивай.

    Вообще, ко всему, что приходит извне относись как к атаке. Будь параноиком. Каждый пользователь - враг. Каждый запрос - попытка нагнуть твой сервер. И тогда у тебя не будет проблем с безопасностью. Звучит, может странновато, но рукастый засранец - это как пуля в голову. Неважно, сколько у тебя посетителей. Одного рукастого засранца хватит, чтобы стало грустно.
     
  3. Борис животное

    Борис животное Активный пользователь

    С нами с:
    25 янв 2015
    Сообщения:
    11
    Симпатии:
    0
    Разве такой проверки недостаточно
    Код (Text):
    1. if (isset($_FILES['userfile']['error']) AND is_array($_FILES['userfile']['error']))
    Проверять то можно, но зачем делать лишнюю проверку, если, к примеру, PHP сам генерирует $_FILES['userfile']['size'], лишняя проверка - лишняя нагрузка на сервер. (для меня очень важна производительность системы, можно конечно везде всякие проверки пихать, но не хочется этого делать, если они там не нужны)

    Просто я хотел бы точно знать как этот механизм работает, в гугле ничего не нашел.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    данный суперглобальный массив это результат любезной обработки пхп-машиной входящего потока данных из которого выделены файлы, сложены в файловую систему и описаны самым необходимым для первичной обработки образом. все стандартные поля существуют всегда для каждого принятого файла. проверять функцией файлсайз то что приняла пхп-машина это лишнее действие так как она уже сделала за вас файлсайз.
     
  5. Борис животное

    Борис животное Активный пользователь

    С нами с:
    25 янв 2015
    Сообщения:
    11
    Симпатии:
    0
    Спасибо большое, это то, что я хотел узнать!