Как защититься от взлома при загрузки файлов на сервер?

Тема в разделе "PHP", создана пользователем dandandan, 15 фев 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    Делаю загрузку файлов на PHP. Загрузка доступна всем пользователям сайта. Как защититься от взлома при загрузки файлов на сервер? Давно читал, что нужно проверять файлы не по расширению, а по каким-то другим признакам. Поделитесь возможностями решения данной проблемы. :)

    p.s. Загрузить и обработать файл я могу.
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    На нормально настроеном сервере достаточно проверки по расширению и запрет на загрузку .htaccess.
     
  3. SDX

    SDX

    Регистр.:
    28 фев 2008
    Сообщения:
    218
    Симпатии:
    25

    А при этом общепринятые движки типа ДЛЕ могут быть как медвежья помошь при пыпытках сделать сервер безопасным и защищеным от взлома?

    А то там периодически дырки заделывают + много директорий на разрешенных на все правах:-]
     
  4. BACZ

    BACZ

    Регистр.:
    18 июн 2008
    Сообщения:
    608
    Симпатии:
    381
    чистить имена и 100% переименовывать, во что нибудь типа a155674674567.gif
    не допускать двух точек в имени
    разрешать только расширения из миме-типов, чтоб 100% не было неопознанных расширений
    в папку куда будет закидываться файл0 загнать .htacess чтоб ничего не могло выполняться или вообще было deny from all
    проверить движ сайта чтоб 100% не было include-ов из параметров пользователя
    убедиться что экранируются ноль и кавычка
    чтобы 100% не было перезаписи файлов (чтоб не грохнули нужный, типа htacess)
    А кстати нафига аплоад на сайте? вроде ничего хорошего пользователи не способны загрузить (ну кроме игровых демок разве что)
    пусть на рапидшару кладут, если ты конечно не коллекционер версий 99-ых шеллов и турецких индексов

    Вот например сделал кто то аплоад
    http://anoxdata.com/archive/index.php?dir=incoming/

    и можно посмотреть что там ему наложили, спасается лишь тем, что хостинг виндовый


    а вот невиндовый
    http://www.youthhub.tw/ypu/upload
    ну и результат вот
    http://www.youthhub.tw/ypu/upload/file/locus.php
     
  5. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    ТС, смотря что могут пользователи загружать. Если только картинки, то проверяй ф-циями imagecreatefromgif, imagecreatefromjpeg и т.д.
    Переименовывай их желательно в случайное название, например в md5 функцию от имени файла + случайное число. И давать доступ к загруженным файлам не напрямую, а через скрипт, чтоб люди не знали реального расположения файла не сервере.
     
  6. SiMM

    SiMM Создатель

    Регистр.:
    8 фев 2009
    Сообщения:
    41
    Симпатии:
    6
    Даже на нормальнонастроенном сервере находятся идиоты, делающие, к примеру, include вместо readfile.
     
  7. BACZ

    BACZ

    Регистр.:
    18 июн 2008
    Сообщения:
    608
    Симпатии:
    381
    а, кстати да, и картинки чтобы были не прямые как загружено, а прогнанные через GD2, чтобы никакого php-кода внутри жпегов и гифов не оставалось или ещё какого текста, который можно куда-нибудь злостно применить. И доступ к файлам (если он будет) не сразу давать пользователям, а через проверку вручную модератором или администратором сайта.

    это от движка зависит, если у двига проблемы с безопасностью - его никакая фильтрация аплоада не спасёт.
     
  8. SiMM

    SiMM Создатель

    Регистр.:
    8 фев 2009
    Сообщения:
    41
    Симпатии:
    6
    А какой смысл проверять с помощью функций imagecreatefrom*? PHP-код, к примеру, легко может быть встроен и в картинку. Так же, как и в изменении названия файла особого смысла нет (разве что расширения, но это соответствует следующему моему предложению).
    Единственное правило - никогда не выполнять то, что пришло от пользователя.
     
  9. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Смысл в том что из картинки будет создана новая, а если там не картинка а код ПХП например то оно новую создать не сможет и выдаст ошибку и картинка загружена не будет
     
  10. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Если тебе будут заливать юзеры картинки то отфильтруй их

    /* Проверяем изображение ли это */
    $s_img=@getimagesize($_FILES['image']['tmp_name']);
    if( $s_img[2] !==2 ) $err.="Только форматы JPG или JEPEG !<br>";
    else
    {
    Делаем ресайз с коэффициентом 1
    }
     
Статус темы:
Закрыта.