Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bezpieczny upload na serwer
Forum PHP.pl > Forum > PHP
johny-cage
Mam pytanie dotyczące bezpieczeństwa uploadu na serwer. Załózmy że na serwerze mam 2 skrytpy: laduj1.php i laduj2.php
W skrypcie laduj1.php jest formularz z <input type=file> a w skrypcie laduj2.php jest

  1. <?php
  2. $plik1_tmp = $_FILES['plik1']['tmp_name'];
  3. $plik1_nazwa = $_FILES['plik1']['name'];
  4. $plik1_rozmiar = $_FILES['plik1']['size'];
  5.  
  6. move_uploaded_file($plik1_tmp, "jakiskatalog/$plik1_nazwa");
  7. ?>


Oczywiście aby wykonać taką operację katalog do którego nagrywam musi mieć prawa dostępu ustawione na 777. Nasuwa się zatem pewna wątpliwość. Czy ktoś kto w jakiś sposób się dowie że istniej na moim dysku katalog o prawach dostępu do zapisu może napisać sobie skrypt na swoim serwerze i w ten sposób za pomocą skryptu ze swojego serwera nagrywać pliki na mój serwer?
tsharek
Cytat(johny-cage @ 4.09.2007, 08:20:11 ) *
Oczywiście aby wykonać taką operację katalog do którego nagrywam musi mieć prawa dostępu ustawione na 777. Nasuwa się zatem pewna wątpliwość. Czy ktoś kto w jakiś sposób się dowie że istniej na moim dysku katalog o prawach dostępu do zapisu może napisać sobie skrypt na swoim serwerze i w ten sposób za pomocą skryptu ze swojego serwera nagrywać pliki na mój serwer?


dokładnie tak: są generalnie dwa sposoby walki z takimi atakami:
- ukrywanie katalogu (np za pomocą htaccess) przed dostępem z zewnątrz
- filtr na uploadowane pliki (na rozszerzenie, mime type pliku, itp)
johny-cage
Założyłem oczywiście, że osoba która chciałaby mi coś nagrać nie będzie korzystała z żadnego z moich plików ani żadnego inngego pliku znajdującego sie na moim serwerze
Cytat(tsharek @ 4.09.2007, 08:24:45 ) *
dokładnie tak: są generalnie dwa sposoby walki z takimi atakami:- ukrywanie katalogu (np za pomocą htaccess) przed dostępem z zewnątrz- filtr na uploadowane pliki (na rozszerzenie, mime type pliku, itp)
Ukrywanie? Znaczy po prostu, że potencjalny użytkownik nie wie o istnieniu katalogu jednak w przypadku zdobycia takiej wiedzy i tak może coś nagrać swojego?Druga metoda to rozbijanie nazwy pliku i sprawdzanie jego rozszerzenia? Jeśli plik nie jest plikiem o rozszerzeniu jpg to nie można nagrać, w innym wypadku tak? Jak to można zrobić? Choć to i tak liche zabezpieczenie.
devnul
a czemu katalogowi nadajesz 777? życie Ci nie miłe? wystarczy ustawić właściciela katalogu (lub grupę) na takiego samego jak właściciel procesu serwera www. Po wrzuceniu pliku powinieneś niezwłocznie ustawić mu prawa uniemożliwiające wykonywanie pliki (bo przecierz jest to operacja zbędna)
johny-cage
To jest jakieś światło w tunelu. Czy mógłbyś mi powiedzieć jak zmienić lub zarządzać opcją zmiany właściciela katalogu. Ewentualnie gdzie mogę o tym poczytać.
devnul
rozumiem że system unixowy wiec szukaj o chmod, chown, chgrp (analogicznie jesli chodzi o zmiane z poziomu samego php)
envp
Jak patrze na te posty to aż mnie mieli - jedynie @devnull napisał coś sensownego. A więc tak - po pierwsze to większość serwerów nie pozwala "zaglądać do katalogów kolegów", jeśli jednak będzie tak się działo, że serwer będzie źle skonfigurowany to oczywiście na to nic jako user nie poradzisz, bo ktoś przez własny skrypt wrzuci do Ciebie do katalogu plik.php ze złośliwym kodem. Dalej warto sprawdzać mime type, a mod_rewrite ustawic tak, ze jakikolwiek plik z tego katalogu z rozszerzeniem, które dopuszacza apache do prasowania kierował na np index.php, trzecia sprawa - odnośnie złośliwego file inclusion i kodem wstrzyknietym w obrazek - wystarczy tylko przeparsowac obrazek przez gd... Pozdrawiam, kamil.
johny-cage
Czy ustawienie praw dostępu na 644 pomoże? Bo z tego co dziś doczytałem to 644 daje tylko właścicielowi prawo zapisu a reszcie odczytu.
envp
Nom, jesli wlascicielem bedzie apache... mozesz dac ofc 600 i wlasciciela apache ;]
johny-cage
Czy można jakoś sprawdzić kto jest właścicielem? Ewentualnie zmienić właściciela?
devnul
zmieniasz właściciela z poziomu shela poleceniem chown -R nowy_wlasciciel[:nowa_grupa] katalog
w ten sposób zmienisz właściciela dla katalogu i całej jego zawartości
johny-cage
Ponieważ jestem nowicjuszem w tym temacie proszę o bardzie precyzyjną podpowiedź jak zmienić właściciela. Mam wynajęty hosting i dostęp do niego bezpośrednio przez panel kontrolny lub total commandera. Jak można to zrobić przy użyciu tych narzędzi?
erix
Jeśli masz taką możliwość, to trzymaj wysłane pliki poza public_html.
templar
Cytat(johny-cage @ 4.09.2007, 08:20:11 ) *
Mam pytanie dotyczące bezpieczeństwa uploadu na serwer. Załózmy że na serwerze mam 2 skrytpy: laduj1.php i laduj2.php
W skrypcie laduj1.php jest formularz z <input type=file> a w skrypcie laduj2.php jest

  1. <?php
  2. $plik1_tmp = $_FILES['plik1']['tmp_name'];
  3. $plik1_nazwa = $_FILES['plik1']['name'];
  4. $plik1_rozmiar = $_FILES['plik1']['size'];
  5.  
  6. move_uploaded_file($plik1_tmp, "jakiskatalog/$plik1_nazwa");
  7. ?>


Oczywiście aby wykonać taką operację katalog do którego nagrywam musi mieć prawa dostępu ustawione na 777. Nasuwa się zatem pewna wątpliwość. Czy ktoś kto w jakiś sposób się dowie że istniej na moim dysku katalog o prawach dostępu do zapisu może napisać sobie skrypt na swoim serwerze i w ten sposób za pomocą skryptu ze swojego serwera nagrywać pliki na mój serwer?


To raczej niemożliwe ;]. Nie można zdalnie połączyć się z serwerem/katalogiem i bez zalogowania coś do niego pisać.
devnul
@templar: za przeproszeniem pier... od rzeczy. nie ma rzeczy nie możliwych, są tylko takie które zajmują więcej czasu

@johny-cage: przez panel pewnie nie masz możliwości zmiany właściciela, tego tez nie zrobisz z poziomu total commandera, pozostaje ci zwykłą zmiana ustawień uprawńnien (PPM na folderze i dalej musisz szukac - dawno już nie mialem okazji z totala kozystac). prawdopodobnie wlasciciel i reszta rzeczy są ustawione poprawnie przez Twojego usługodawcę hostingowego.
johny-cage
przy chmod 777 wszystko działa poprawnie (bo dlaczego mialoby nie działać), po zmiane na 644 już dostaje komunikat
"Warning: move_uploaded_file(pliki/listing1.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in..."

Może jest sposób sprawdzenia właściciela pliku?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.