Проверка на тип загружаемого файла.

Discussion in 'PHP' started by blaga, 4 Feb 2007.

  1. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Решил добавить на свой сайт форму для того что бы пользователи могли загружать свои обои. Потом они естественно будут проходить модерацию, но не это важно. Меня интересуют способы запрета заливки левых файлов типа .php .phtml и т.п. Сейчас вот у меня есть такой код:
    PHP:
    if (substr($_FILES['filename']['type'],0,5) == 'image')
        {        
    move_uploaded_file($_FILES['filename']['tmp_name'], "/img/wall".$name_image."");
        }
        else
        {        echo 
    "Разрешена загрузка только изображений";
        }
    Короче мне нужно что бы была возможность загружать только картинки. Что думаете насчет этого кода? Безопасен ли он? Можно ли его использовать в таких целях?
    Пока писал этот текст в голову пришла одна мысль, а что если загружать все картинки в один каталог, в котором будет эштеаццесс в котором будет прописано что бы все файлы в этом каталоге обрабатывались как картинки. Возможно ли так сделать? И опять же безопасность этого способа. И какие способы вы можете предложить? Интересны любые идеи по этой теме.
     
  2. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    На счет безопасности такого способа ничего скачать не могу, но когда я делал подобный скрипт, то проверял загружаемые файлы по расширению(последние 4 символа должны были быть .jpg).
     
    1 person likes this.
  3. InferNo23

    InferNo23 Elder - Старейшина

    Joined:
    5 Sep 2006
    Messages:
    183
    Likes Received:
    126
    Reputations:
    42
    я б через .хтаццесс сделал
    в папку хтацесс с

    AddType image/jpeg .php .php3 .phtml
     
    1 person likes this.
  4. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Я тоже так думал, но разницы не вижу особой. Хотя хз...
     
  5. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2InferNo23 (((((((((((((((((((((((( ты же хакер!!!!((((((
    2blaga ((((((((((((((((((((((((((((( ты же хакер!!!!(((((((
     
  6. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Самый верный способ - натравить getimagesize или exif_imagetype на полученную картинку - если матюгнутся, знач подстава, нет - все в порядке, можешь копировать.

    Кстати, последняя предпочтительней - работает быстрее и не матерится а тихо возвращает false

     
    1 person likes this.
  7. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    2ZaCo, зато ты chinga-chguk.
     
  8. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2Helios ты совсем дурачок? головка бобо?
    2blaga а ты хакер.
     
    2 people like this.
  9. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    2ZaCo
    А те только б пофлеймить?

    Есть что-то конструктивное - пиши, а нету - не засоряй тему
     
  10. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    На мой взляд: полная фильтрация имени файла на его расширения. Да и .htaccess с
    Code:
    RemoveType .php .pl .php5 .php4 .php3 .phtml .cgi 
    самое то.
    Можно и на кол-во расширений тоже проверять можно...
     
    1 person likes this.
  11. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Helios говорит дело по поводу getimagesize
    а еще в папку куда загружать картинки запретить выполнение скриптов!
    + фильтр типа при загрузке (это то что ты уже написал)
    В таком сочетании это будет безопасно!
     
    2 people like this.
  12. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2nc.STRIEM ООООО ХЭК а еще можно писать все на хтмл и будет *****то ИМХО
     
    1 person likes this.
  13. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Я бы стал проверять первые байты файла на сигнатуру разрешенного типа изображения...
     
    1 person likes this.
  14. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Ксури, exif_imagetype() так и делает, я уже писал:

     
  15. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    да нахрена вы такие сложности то придумываете.
    Нужно:
    а) проверять расширение файла (символы после последней точки) на предмет соответствия списку разрешенных (их всегда будет меньше чем запрещенных и так надежнее т.к. ничего случайно не упустишь)
    б) чтоб были прямыми руками настроены mime типы (т.е. чтоб не случилась касяка с выполнением картинки как скрипта)

    все, имхо.
     
  16. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Ну а по сути надо все предложенные методы скомпоновать и использовать вместе, тогда будет безопасно

    ettee
    А насчет скрина, это сработает только если в .htaccess будет
    AddType application/x-httpd-php jpg