WebDeveloper
 g³ówna | forum manual | skrypty |  artyku³y |  projekty | porady |  zasoby |  linki 
dzia³y
  •  manual PHP
  •  skrypty PHP
  •  artyku³y
  •  projekty
  •  porady
  •  zasoby
  •  linki
  •  
    forum
  •  php
  •  apache
  •  mysql
  •  postgresql
  •  faq php
  •  pomocnik php
  •  
    archiwum
  • Nowy dzia³: porady !
  • Kurs PHP
  • Zapisz siê na nasz newsletter !
  • Serwery obs³uguj±ce PHP !
  • Nadchodz± zmiany!
  • Zostañ wspó³twórc± PHP.zone.pl !
  • Jest PHP 4.0.1 !
  • MySql na licencji GPL !
  • Konfiguracja serwera!
  • Forum dyskusyjne otwarte !
  • redakcja

    Je¶li masz ciekawe informacje odno¶nie PHP, skrypty, porady, linki itp. lub chcia³by¶ wspó³tworzyæ serwis PHP.zone.pl daj nam znaæ na email !



    dodaj poradê !


    Powered by:
    PHP
    Apache
    MySql
    Linux

    users online: 8

    Bezpieczne uploadowanie plików
    ( 21. Wrzesieñ 2000)
    ( Pawe³ *peewee* Subocz )

    Na pocz±tku omówie krótko jak w PHP dzia³a uploadowanie plików, a pó¼niej przejde do sedna problemu.
    Ka¿dy plik wys³any do naszego skryptu za pomoc± formularza jest zapisywany do katalogu tymczasowego z unikalna nazw± (np. /tmp/php9jsikE). Informacje o tym gdzie siê znajduje s± zapisywane w odpowiedniej zmiennej.

    Tekst powsta³ na podstawie postu Zeeva Suraskiego na BUGTRAQ'u.
    Na pocz±tku omówie krótko jak w PHP dzia³a uploadowanie plików, a pó¼niej przejde do sedna problemu.
    Ka¿dy plik wys³any do naszego skryptu za pomoc± formularza jest zapisywany do katalogu tymczasowego z unikalna nazw± (np. /tmp/php9jsikE). Informacje o tym gdzie siê znajduje s± zapisywane w odpowiedniej zmiennej. Jej nazwa zale¿y od nazwy wybranej w formularzu. Np. W formularzu napisali¶my: <input type=file name=userfile> w zmiennej $userfile bêdzie znajdowaæ siê scie¿ka do tymczasowego pliku na serwerze.
    Problem polega na tym, ¿e kto¶ mo¿e jako parametr w urlu podaæ userfile z nazwa jakiego¶ normalnego pliku na serwerze.
    Czy to mo¿e nam zaszkodziæ zale¿y tylko od tego, co robimy z danym plikiem. Je¶li kopiujemy go do jakiegos publicznie dostêpnego miejsca, to mo¿na wpisaæ w swojej przegl±darce np. http://serwer.pl/upload.php?userfile=/etc/passwd i ju¿ dostajemy pe³n± listê u¿ytkowników na tym serwerze... Trzeba jednak pamiêtaæ, ¿e w ten sposób mo¿na dostaæ siê jedynie do plików, do których ma dostêp user, z prawami którego dziala demon http (najczê¶ciej nobody). Mimo wszystko jest to niebezpieczne.

    Rozwi±zania:
    Zeev proponuje wy³±czenie funkcji register_globals, przez co parametry z urla nie zostan± wpisane do odpowiadaj±cym im zmiennym i wyci±gniêcie danych z $HTTP_POST_VARS. Jednak moim zdaniem to niewiele pomo¿e bo przecie¿ te informacje mog± byæ tak samo sfa³szowane, bêdzie to tylko wymaga³o trochê wiêcej pracy. Jedynym sensownym rozwi±zaniem jest dok³adne sprawdzanie pliku, który dostajemy.
    Nowe wersje PHP (4.0.3RC1 i 3.0.17RC1) zosta³y ju¿ wyposa¿one w funkcjê, która pomaga w zabezpieczeniu siê przed tego typu oszustwami - is_uploaded_file($sciezka);
    PHP 4.0.3 zawiera tak¿e funkcjê move_uploaded_file($sciezka, $nowa_sciezka), która kopiuje plik pod warunkiem, ¿e zosta³ zuploadowany.
    Je¶li pracujemy na starszym PHP i nie zamierzamy, lub nie mo¿emy zaktualizowaæ go musimy sami napisaæ odpowiednie funkcje. Mo¿emy np. sprawdziæ datê utworzenia domniemanego pliku tymczasowego i odrzuciæ go, je¶li jest mniejsza o np minutê.
    Je¶li oczekujemy rysunku to za pomoc± funkcji PHP mo¿emy sprawdziæ czy plik rzeczywi¶cie jest rysunkiem.
    Napewno mo¿na wymy¶liæ te¿ inne regu³y specyficzne dla danego typu plików.





    komentarze | strona g³ówna






    kontakt

    autor:

    Hubert Mierzwiak

    wspó³praca:

    Piotr Karolak

    Chcesz prowadziæ swój dzia³ tematyczny typu XML, SQL, admin, JavaScript, itp?
    Napisz do nas !
     
    skrypty
  • designer.zip
  • vipAuth.tgz
  • phpCenzura.tgz
  • vip_php.tgz
  • pomocnik_light
  • ankieta
    Co s±dzisz o stworzeniu FAQ PHP?
    super!
    po co?

    poprzednie

    newsletter

    wpisz swój email i wci¶nij Enter

    linuxnews.pl
  • KRRiTV stra¿nikiem!?
  • Dzisiejsze zebranie...
  • Felieton w warunkach ekstremalnych
  • Nexidion Designer
  • Solaris OpenSource
  • KDE 2.0.1
  • Jest ju¿ nowy Debian...
  • Tydzieñ min±³...




  • Manual | Skrypty | Artyku³y | Projekty
    Porady | Zasoby | Linki
    G³ówna | Forum

    Copyright 2000 Hubert Mierzwiak