За последние 24 часа нас посетили 8782 программиста и 667 роботов. Сейчас ищут 138 программистов ...

Является ли надёжной такая проверка загружаемого файла

Тема в разделе "PHP для новичков", создана пользователем Zar, 12 фев 2013.

  1. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.838
    Симпатии:
    948
    дядь, у меня на 73килофайла получилось 0,007с дельты на винде 54hrpm и 0,004с на 84килофайла на винте 72hrpm.
    тысячные доли секунды не считаю аргументом.

    так, перфоманс проверил на ноуте и сервере, про безопасность поговорили, привязку с ос отмели.

    еще что будет?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.439
    Симпатии:
    1.744
    они поменяли механизм не так давно. поменяли его я так понял во всём что касает пхп и вебсервера. возможно во всём юниксе. хз. может я че путаю, но вроде как оно стало умнее и надёжнее.
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.075
    Симпатии:
    958
    Адрес:
    там-сям
    С изображениями можно поступить так:
    допустим сразу после загрузки мы имеем $mime = $_FILES['attachement']['type']; это недостоверная информация, но это отправная точка для проверок.
    Код (PHP):
    1. // если браузер сказал, что это картинка
    2. if (strpos($mime, 'image/') === 0) {
    3.   $size = @getimagesize($filename); // да, я знаю что такое "собака"
    4.   if (!isset($size['mime']) || strpos($size['mime'], 'image/') !== 0) {
    5.     throw new Exception('это ахтунг, а не картинка!');
    6.   }
    7.   // тут нормальная работа с изображением
    8. }
    9.  
    В документации пишут, что для той же цели можно использовать exif_imagetype(), она якобы быстрее. Но мы разве куда-то торопимся? Когда вслед за upload идет дорогая операция превью (или выдергивания картинок из видео потока), экономить наносекунды становится неприлично.

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

    Добавлено спустя 5 минут 42 секунды:
    p.s. Если говорить про мошенничество с изображениями, то можно, например, подклеить к картинке какую-то другую информацию, при этом картинка будет валидной и браузер её будет выводить. Можно потратить какое-то процессорное время еще и на такие проверки, но я считаю нас не должно волновать, что в конце нашего JPEG кто-то написал невидимое слово "XYЙ"! Главное, что картинка является картинкой.
     
  4. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Значица getimagesize. Спасибо!
     
  5. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    А когда-то ломали phpbb при помощи пхп кода в картинке)
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.075
    Симпатии:
    958
    Адрес:
    там-сям
    Насколько я понимаю тот тип атаки, надо чтобы файл был доступен по его исходному имени. И это имя выглядит примерно так:
    MyImage.jpg.php
     
  7. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    вроде его эксплуатировали добавлением пхп кода в картинку, а вот как ее заставляли работать как пхп файл не помню, помню что именно прогружали картинку с норм расширением
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.075
    Симпатии:
    958
    Адрес:
    там-сям
    Ну есть код в картинке, ок. Надо чтобы апач сопоставил его с обработчиком PHP. Как?
     
  9. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.838
    Симпатии:
    948
    ну самый простой вариант это движки у которых инклюды через гет можно передать. тогда картинка загрузится в анализатор, который выдаст стандартный тип данных - plain/(text|html) и, найдя свои конструкции начнет их выполнение. в потоке будет отсебятина (оригинальный код картинки) и полезный для хакера результат выполнения кода
     
  10. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Инклуд через гет уже нигде не встретишь), года 3-4 назад еще было, но сейчас большааая редкость)
     
  11. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.838
    Симпатии:
    948
    и все же есть. уж если не новые дырки, то люди, использующие старый софт. тут недавно помощи просили с 4м пыхом на борту.

    поностальгировал, кстати, от вашего сообщения =) в одном из моих первых "пабликов" скуэль запрос генерировался флеш-роликом и передавался сценарию через гет. и как-бы не в тени а пользователя перенаправляли к странице с таким подарком в адресной строке. сколько ж воды утекло с тех пор...
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.439
    Симпатии:
    1.744
    и ченить случилось? =) или никто не обратил внимание?
     
  13. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.838
    Симпатии:
    948
    коллега обратил внимание, показательно сделал дапм, стер все нахер и залил дамп обратно. все через одну дыру.