Fałszywy Upload
Postanowiłem zacząć nowy cykl o bezpieczeństwie skryptów php - postaram się opisać wiele znanych i mniej znanych spraw związanych z pisaniem w miare bezpiecznych skryptów
W 1 notce postanowiłem opisać dość znany jednak często pomijany z uwagi na ‘niskie zagrożenie’ (chociaż tak naprawde jest bardzo wysokie) - źle napisany skrypt do uploadu który pozwala na wgranie dowolnego pliku.
Dla przykładu (przykładowy skrypt znaleziony w googlach):
Pomińmy już fakt, że to pseudo-zabezpieczenie o wielkości pliku (input o name=”MAX_FILE_SIZE”) można obejść w kilka minut, ale o tym kiedy indziej
Skrypt wogóle nie sprawdza rodzaju pliku tylko go odrazu akceptuje. Co jeśli ktoś np. wrzuci tam plik .php który dla przykładu będzie kasował wszystko katalog niżej ? No właśnie
Oczywiście może zrobić też inne rzeczy - nie mówiąc już o tym co może zrobić przy źle skonfigurowanym serwerze …
Jak można się przed tym zabezpieczyć ? Dużo początkujących stosuje coś w stylu
Czemu to zabezpieczenie jest głupie ? Wystarczy nazwać plik dla przykładu plik.jpg.php - i $ext[1] będzie = “jpg”
Można np za to dać.
Które sprawdza ostatnie to co występuje po .
Do końca bezpieczne to też nie będzie bo czasami można podszyć jakiś plik pod inny (przykład - chociażby przy niektórych ustawieniach serwera może parsować php w plikach html).
Często stosuje się też substr() i sprawdza 3 ostatnie znaki, co jeśli jednak rozszerzenie ma np 4 litery ? (np. plik .mpeg albo .torrent)
Obecnie chyba najlepszą metodą jest sprawdzanie mime-type (co to jest ?) - jest on zapisywany w $_FILES jako $_FILES[’plik’][type]
Możemy wtedy zapisać do tablicy liste dozwolonych typów mime i sprawdzać czy wysyłany pasuje do któregoś z nich (przykładową liste typów mime można znaleźć tutaj)
10 Comments so far
Leave a reply
ty, moge tą notke umieścić jako art na webPacket ?
W celu wyciagniecia rozszerzenia pliku polecam zapoznac sie z funkcja pathinfo w manualu php.
Obecnie chyba najlepszą metodą jest sprawdzanie mime-type (co to jest ?) - jest on zapisywany w $_FILES jako $_FILES[’plik’][type]
- takie stwierdzenie to przesada typ można łatwo podmienić dodając kolejne np.obraz.php.jpg i wpisując cała ścieżkę uruchamia sie skrypt php (obraz.php.jpg)
Hi people! Great job! Would you please also visit my homepage?
Your site looks great! Would you please also visit my homepage?
This is a wonderful page for everyone! Visit my sites, please:
I really enjoyed this page. I will be linking and I will be trying to read and research all that there is to offer from this site! Visit my sites, please:
Hello! Good Site! Thanks you! dhjygxovgtwmy
zawkxu
Niestety nie skuteczne, żadne z w/w metod nie spełniają do końca swojego zadania, zmiana pliczku abc.html na abc.gif i mime-type pokazuje nam image/gif ..fakt ze z takim plikiem nic się później nie zrobi,ale można komuś zakrzaczyć formularz czy okienko z pseudo zdięciem… :- )