Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> uploadu plików, zabezpiecznie przed uploadem *.php
Cezar708
post 5.07.2005, 16:26:18
Post #1





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Mam problem

Musze uploadowac pliki, poprzez formularz html, do katalogu, ktory jest dostepny po wpisaniu "z palca" z paska adresu.

Chodzi o to aby haker nie zuploadowal sobie jakiegos pliku w stylu usune_wszystko.php tongue.gif i pozniej go po prostu nie wykonal.

Dodam ze musze uploadowac bardzo duzo typow plikow (nie tylko graficzne) i nie za bardzo wchodzi w rachube filtrowanie ich po MIME.

Jak wy robicie takie zabezpieczenia?... dodajecie header, czy jak?


pozdrawiam.
Go to the top of the page
+Quote Post
crash
post 5.07.2005, 16:35:03
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


  1. <?php
  2. if( substr( $_FILES[ 'plik' ][ 'name' ], -3) == 'php' )
  3. {
  4.  echo 'Wgrywasz plik *.php. Nieładnie :-P';
  5. }
  6. else
  7. {
  8.  // ...
  9. }
  10. ?>


--------------------
Go to the top of the page
+Quote Post
Cezar708
post 5.07.2005, 16:47:30
Post #3





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


no dobrze, ale czy czasem nie ma innych plikow wykonywalnych?
np takie jak php3, php4

Wiem ze zalezy to od serwera, ale w moim przypadku to bedzie uzywane na wielu serwerach, wiec nie moge za kazdym razem sprawdzac jakie pliki beda wykonywalnymi. Poza tym nie moge zaufac temu ze haker sam w jakis sobie znany sposob zmieni typy wykonywalnych plikow.
Go to the top of the page
+Quote Post
NuLL
post 5.07.2005, 16:50:32
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Można tak
  1. <?php
  2. $_parts=explode('.',$_FILES[ 'plik' ][ 'name' ]);
  3. if( eregi($_parts[count($_parts)-1],'php' )
  4. {
  5.  echo 'Wgrywasz plik *.php. Nieładnie :-P';
  6. }
  7. else
  8. {
  9.  // ...
  10. }
  11. ?>


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
crash
post 5.07.2005, 16:51:22
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Czasem wypadałoby też trochę ruszyć główką tongue.gif

  1. <?php
  2. $zabronione = array( 'php', 'php4', 'php5' );
  3.  
  4. $rozszerzenie = explode( '.', $_FILES[ 'plik' ][ 'name' ] );
  5. $rozszerzenie = array_shift( $rozszerzenie );
  6.  
  7. if( in_array( $rozszerzenie, $zabronione ) )
  8. {
  9.    echo 'Wgrywasz zabroniony typ pliku. Nieładnie :-P';
  10. }
  11. else
  12. {
  13.    // ...
  14. }
  15. ?>


Ten post edytował crashu 5.07.2005, 16:53:54


--------------------
Go to the top of the page
+Quote Post
Cezar708
post 5.07.2005, 17:04:00
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


ochh!

Ale ja pytam o przypadku, kiedy NIE WIEM, jakie typy plikow na danym serwerze sa wykonywalne. Tu *.php3 i *.php4 podalem tylko jako przyklad.

przeciez w przyszlosci moze sie na przyklad zdazyc ze moze stac sie wykonywalnym na przyklad plik *.php5.. a jeszcze pozniej *.php6... tylko nie pisz ze mozna tak:

  1. <?php
  2.  
  3. $rozszerzenie = explode( '.', $_FILES[ 'plik' ][ 'name' ] );
  4. $rozszerzenie = array_shift( $rozszerzenie );
  5.  
  6. for ( $i=1; $i<10000000; $i++)
  7. {
  8.    if ( $rozszerzenie == &#092;"php\".$i )
  9.   {
  10.      echo 'Wgrywasz zabroniony typ pliku. Nieładnie :-P';
  11.   }
  12. }
  13. else
  14. {
  15.    // ...
  16. }
  17. ?>


tongue.gif

Ten post edytował Cezar708 5.07.2005, 17:04:55
Go to the top of the page
+Quote Post
Pigula
post 5.07.2005, 17:18:02
Post #7





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Cezar708 @ 2005-07-05 18:04:00)
przeciez w przyszlosci moze sie na przyklad zdazyc ze moze stac sie wykonywalnym na przyklad plik *.php5.. a jeszcze pozniej *.php6...

to wtedy porpwaisz swoj skrypt a co do plikow wykonywanyc na serwerze to mozesz sprawdzic w ustawieniach lub zapytac sie admin i jak np. wykonywany bedzie plik *.inny to to rozszerzenie dajesz do tablicy rozszerzen zabronionych smile.gif
Go to the top of the page
+Quote Post
dr_bonzo
post 5.07.2005, 17:30:55
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


1. autoryzacja dostepu do formularza uploadu
2. uploadujesz do katalogu do ktorego niue dostaniesz sie poprzez wpisanie adresu w przegladarce


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
legorek
post 5.07.2005, 17:50:40
Post #9





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Ja to rozwiązałem jeszcze inaczej, w pliku .htaccess mam

Kod
AddType application/x-httpd-php-source php
AddType application/x-httpd-php-source php3
AddType application/x-httpd-php-source php4
AddType application/x-httpd-php-source phtml


itd.


--------------------
Go to the top of the page
+Quote Post
Cezar708
post 5.07.2005, 17:52:41
Post #10





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


no to jeszcze raz...

1. Musze uploadowac do katalogu ktory mozna napisac 'z palca' bo inaczej nie mialbym problemu, bo coz za problem skoro plik sie nie ma szans wykonac.

2. Chce ominac ciagla poprawianie kodu co jakis czas, poniewaz nie bede mial do nich pozniej dostepu

3. Dostep do formularza jest niestety publiczny i taki musi pozostac

4. Nie wiem na jakich serwerach w przyszlosci te skrypty beda dzialaly, wiec tez nie wiem z gory jakie pliki, beda wykonywalne

5. Nie moge tez na stale wpisac wszystkich mozliwych rozszerzen do jakiejs tablicy, bo to bylaby zbyt dluga i zmudna robota


Idealne byloby umieszczenie jakiegos naglowka w pliku, ale nie wiem jak to zrobic dla roznych typow plikow. Oczywiscie mile widziane bylyby alternatywne rozwiazania.


... dlatego ciagle szukam ... POMOŻECE?questionmark.gifquestionmark.gif?
Go to the top of the page
+Quote Post
crash
post 5.07.2005, 18:06:40
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


No to napawdę, sprawdzaj typ MIME, bo poza tym niemasz zbyt dużych możliwości, bo jak admin ustawi dozwolone rozszerzenie php na np. run to co? No ale z drugiej strony, jak by takie rzeczy miał odgadywać ewentualny hacker?


--------------------
Go to the top of the page
+Quote Post
hawk
post 5.07.2005, 20:31:35
Post #12





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Cytat
1. Musze uploadowac do katalogu ktory mozna napisac 'z palca' bo inaczej nie mialbym problemu, bo coz za problem skoro plik sie nie ma szans wykonac.

Właściwie to dlaczego musisz? IMHO wcale nie musisz. Możesz przecież zrobić skrypt, który przepuści zawartość pliku z tego katalogu na przeglądarkę. Nie widzę żadnego powodu, dla którego musisz trzymać się tego rozwiązania. No ale jeżeli naprawdę musisz napisać skrypt, który ma poważną dziurę w bezpieczeństwie (czyli: ktoś ci każe), to nie twoja wina.
Go to the top of the page
+Quote Post
Pedros
post 23.07.2005, 18:39:07
Post #13





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 17.04.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


A jak zrobić coś podobnego...(chodzi dokładniej rzecz biorąc o możliwość wgrania tylko i wyłącznie plików: plików archiwów - zip, rar, itp, plików exe i graficznych - jpegi, png, gif) przy pomocy mime types. Pamietam, że gdzies to kiedyś widziałem, ale opcja szukaj nie daje mi pozytywnych rezultatów... prosze o pomoc
Go to the top of the page
+Quote Post
crash
post 23.07.2005, 18:53:25
Post #14





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Za pomocą samych typów mime tego nie zrobisz bo zip, rar, php itp mają taki sam. Użyj tego co przedstawiliśmy wyżej + tablica z dozwolonymi typami porównywana z $_FILES[ 'plik' ][ 'type' ]...


--------------------
Go to the top of the page
+Quote Post
Pedros
post 24.07.2005, 11:04:26
Post #15





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 17.04.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No niby wystarczyłoby tak zrobić(tylko od drugiej strony... dozwolonych formatów jest mniej smile.gif )

  1. <?php 
  2. $dozwolone = array(&#092;"gif\",\"jpg\",\"jpeg\",\"png\",\"zip\",\"rar\",\"gz\",\"exe\");
  3. $rozszerzenie = explode( '.', $_FILES[ 'plik' ][ 'name' ] );
  4. $rozszerzenie = array_shift( $rozszerzenie );
  5.  
  6. if( in_array( $rozszerzenie, $zabronione ) )
  7. {
  8.  ....
  9. }
  10. else
  11. {
  12. echo 'Wgrywasz zabroniony typ pliku. Nieładnie :-P';
  13. }
  14. ?>

Pojawia się tylko jeden problem.... W zasadzie można zmienić rozszerzenie pliku i wgrać go na serwer. Nie wiem jak to technicznie wygląda, ale żeby później się nie okazało, że jakaś przeglądarka sprawdzi mime i uruchomi skrypt php... dlatego przydałoby się chyba połączenie tego i sprawdzania mimów, a to nie wiem jak zrobić(i jakie mime mają te rozszerzenia smile.gif )...
Go to the top of the page
+Quote Post
mike
post 24.07.2005, 11:38:15
Post #16





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(Pedros @ 2005-07-24 11:04:26)
(...) sprawdzania mimów, a to nie wiem jak zrobić

1. mime_content_type()
2. Ostrożnie z tym. Taki shIEt badzIEwie potrafi zmienić typ mime pliku. Kiedyś pisałem system uploadu obrazków, który się rozbił o ta "przeglądarke" ponieważ nie przesyłała plików .jpeg z poprawnym typem mime.

Cytat(Pedros @ 2005-07-24 11:04:26)
(...) (i jakie mime mają te rozszerzenia smile.gif )...

Kiedyś na forum był topic ze spisem typów mime, ale został usunięty (nie wiem z jakich powodów, może był za stary). Bardzo długo go szukałem zanim się o tym zorientowałem.

Podziękowac należy Google za to że nadal mamy do niego dostęp:
forum.php.pl: Spis typów mime Cached by Google
Go to the top of the page
+Quote Post
sobstel
post 24.07.2005, 14:55:36
Post #17





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(mike_mech @ 2005-07-24 11:38:15)
Kiedyś na forum był topic ze spisem typów mime, ale został usunięty (nie wiem z jakich powodów, może był za stary). Bardzo długo go szukałem zanim się o tym zorientowałem. Podziękowac należy Google za to że nadal mamy do niego dostęp:
forum.php.pl: Spis typów mime Cached by Google

tu jest chyba nawet troszke wiecej :
http://www.webmaster-toolkit.com/mime-types.shtml


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Pedros
post 24.07.2005, 18:10:19
Post #18





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 17.04.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No .... jestem już prawie na ukończeniu.
Ale pojawił się pewien problem... nie wiem czy wszyscy popełniliście błąd(lub jedna osoba popełniła, a reszta nie zauważyła) czy mój serwer jest upośledzony.... ale:

mam sobie nazwę pliku costam.zip

po wgraniu tego przez formularz zaczynam sprawdzać, czy rozszerzenie jest ok... i tu pojawiają się jaja smile.gif

po takim kawałku kodu z:
  1. <?php $rozszerzenie=explode('.', $_FILES['file']['name']);
  2. $rozszerzenie=array_shift($rozszerzenie);?>


i wyświetleniu $rozszerzenie, przeglądarka pokazuje mi: costam
i teraz kwestia do rozwiązania... czy to możliwe? skoro niby funkcja array_shift" title="Zobacz w manualu PHP" target="_manual usuwa z początku tablicy smile.gif))

Ten post edytował Pedros 24.07.2005, 18:10:35
Go to the top of the page
+Quote Post
sobstel
post 24.07.2005, 19:04:11
Post #19





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


czytaj uwaznie manuala : "array_shift() usuwa pierwszą wartość parametru tablica i zwraca go skracając tą tablicę o jeden element" , czyli w twoim przypadku w $rozsrzenie bedzie siedziec ten pierwszy element. to czego szukasz to raczej array_pop" title="Zobacz w manualu PHP" target="_manual


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Pedros
post 24.07.2005, 19:25:14
Post #20





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 17.04.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


w takim razie dzięki za pomoc...
dla mnie słowo USUWA jest jednoznaczne... jak coś jest usunięte, to tego nie ma smile.gif) ale widać tłumacz manuala inaczej to zrozumiał :/

PS: teraz przynajmniej wiadomo, że to crashu pisząc kod się walnął winksmiley.jpg
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:18