Archive for the 'PHP' Category
CMS za 40zł
Damian wypatrzył dziś na forum WH ciekawą oferte:
[Kupie] system portalowy rozbudowany CMS do 40 zeta
I podczas oglądania Potyczek Mr. Szatana obmyślaliśmy jak taki CMS może wyglądać:
13 commentsFał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