![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jak bezpiecznie załadować plik graficzny na serwer, aby rzeczywiście był plikiem PNG, JPG lub GIF i nie zawierał szkodliwego kodu?
getimagesize() Wymagania: GD Nie chroni przed: wrzuceniem kodu PHP do obrazu (wciąż wykrywa typ: image/*) mime_content_type() Czy funkcja zawsze poprawnie wykrywa typ MIME pliku (NIE na podstawie rozszerzenia)? Czy jest wystarczającym zabezpieczeniem? W podręczniku PHP jest napisane, że funkcja ma status "deprecated" i odsyłają do rozszerzenia Fileinfo z PECL - wątpię, żeby było dostępne na większości serwerów, szczególnie darmowych, gdyż trzeba je doinstalować. $_FILES['type'] Tak, to naiwna metoda, gdyż typ jest wysyłany przez przeglądarkę. Pole MAX_FILE_SIZE Do czego właściwie przydaje się to pole? Zabezpieczenie nie chroni przed userami, którzy zwiększą wartość tego pola. Wniosek? Których zabezpieczeń wystarczy użyć, aby mieć pewność, że na serwer zostanie wysłany rzeczywiście plik PNG, JPG lub GIF? -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%) ![]() ![]() |
Hmm, że tak się zapytam z poza pudełka, a nawet jeśli ktoś wyśle ci kod PHP z rozszerzeniem .jpg (or anything else) to przecież i tak ten kod się nie wykona - chyba że twój serwer parsuje pliki graficzne jako PHP, lub include'ujesz pliki graficzne w twoim kodzie. Mylę się? Poza tym, AFAIK, nie ma definitywnej możliwości sprawdzenia typu pliku, poza parsowaniem tegoż.
Ten post edytował bregovic 4.11.2008, 20:35:20 -------------------- Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 1 Dołączył: 1.02.2004 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mój pomysł (z podkreśleniem pomysł):
1.Odpalić skrypt resize-ujący (np generujący miniaturki) 2. Jeżeli wywali błąd to to nie jest poprawny imidż, a jeżeli nie, to można założyć, że to poprawny imidż. Ew. 3. Zresizować do podobnych wymiarów i porównać rozmiar (wagę) obu danych. Jeżeli normalny obrazek to wymiary będą podobne, a jeżeli jakiś kod to po przetworzeniu będzie o wiele mniejsze (pewnie jakiś string z błędem) -------------------- E-Danek.info
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
sprawdzac rozszerzenie i mime pliku PRZY CZYM trzeba wylaczyc opcję HTTP PUT w serwerze (w apache'u jest ona domyslnie wylaczona), z kolei w ISS w niktorych wersjach jest wlaczona ta opcja i trzeba ją ręcznie wylaczyc
-------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Sposób stary jak świat: wczytać kilka pierwszych i ostatnich bajtów z pliku by zobaczyć, co zawiera. Użyć biblioteki GD i wykonać jakąś operację na obrazku - jeśli będzie poprawna, to obrazek jest ok.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Sposób stary jak świat: wczytać kilka pierwszych i ostatnich bajtów z pliku by zobaczyć, co zawiera. Użyć biblioteki GD i wykonać jakąś operację na obrazku - jeśli będzie poprawna, to obrazek jest ok. ... i właśnie przez takie myślenie dużo stron jest podatnych na ataki Ten post edytował pyro 5.11.2008, 14:07:40 -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
@pyro
Jak już tak mówisz, to może wyjaśnić jak zrobić to dobrze ![]() -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
bim2, juz napisalem, patrz wyzej.
Napewno to nie jest bezpieczne jesli zrobi sie tak jak powiedzial Pilsener -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 155 Pomógł: 9 Dołączył: 26.01.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
boże dzieci się flejmują o bezpieczeństwie. Prawda jest jedna. Zabezpieczyć się można tylko przed ludźmi którzy chcą ale nie potrafią się włamać. A ci co chcą i potrafią plus mają dość determinacji napewno obejdą. A co do samego tematu to exploit na GD to dla mnie coś nowego. Pierwszy resize powie że pomimo dobrego headera pliku wewnątrz jest kaszana.
-------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
MMX: A jeśli nie chcę zmniejszać obrazu?
Na razie sprawdzam rozszerzenie pliku oraz wywołuję getimagesize(), aby sprawdzić, czy szerokość jest większa od 0, a wymiary mniejsze od maksymalnych ustawionych w konfiguracji. Do tego move_uploaded_file(). Czy to wystarczy? -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
MMX: A jeśli nie chcę zmniejszać obrazu? Na razie sprawdzam rozszerzenie pliku oraz wywołuję getimagesize(), aby sprawdzić, czy szerokość jest większa od 0, a wymiary mniejsze od maksymalnych ustawionych w konfiguracji. Do tego move_uploaded_file(). Czy to wystarczy? Tak ![]() Plus jeżeli zachowujesz oryginalną nazwę pliku to sprawdź czy nie zawiera HTML ![]() -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Teoretycznie nazwa pliku nie może zawierać znaków: <, >, ", ?... Przynajmniej w systemie Windows. Czy jest więc zagrożenie, że nazwa pliku będzie zawierać HTML lub przełamie znacznik <img>?
Ten post edytował WebCM 6.11.2008, 14:35:25 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
boże dzieci się flejmują o bezpieczeństwie. Prawda jest jedna. Zabezpieczyć się można tylko przed ludźmi którzy chcą ale nie potrafią się włamać. A ci co chcą i potrafią plus mają dość determinacji napewno obejdą. A co do samego tematu to exploit na GD to dla mnie coś nowego. Pierwszy resize powie że pomimo dobrego headera pliku wewnątrz jest kaszana. Tak oczywiście, to wogóle nic nie zabezpieczajmy i dajmy kazdemu wejsc do systemu, gratuluje "intieligęcji" MMX3 -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Teoretycznie nazwa pliku nie może zawierać znaków: <, >, ", ?... Przynajmniej w systemie Windows. Czy jest więc zagrożenie, że nazwa pliku będzie zawierać HTML lub przełamie znacznik <img>? Pod uniksami można w nazwie pliku wpisać różne znaki ![]() Ten post edytował Riklaunim 6.11.2008, 15:42:05 -------------------- |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Prawda jest taka, że wystarczy kontrola nagłówka obrazka, zapisanie go pod właściwym rozszerzeniem - oczywiście pod warunkiem, że nie ma innych dziur, np. pozwalających na include dowolnego obrazka. Nawet jeżeli plik jpeg nie będzie poprawny, to co z tego? Nikt się przez to nie włamie...
-------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Prawda jest taka, że wystarczy kontrola nagłówka obrazka, zapisanie go pod właściwym rozszerzeniem - oczywiście pod warunkiem, że nie ma innych dziur, np. pozwalających na include dowolnego obrazka. Nawet jeżeli plik jpeg nie będzie poprawny, to co z tego? Nikt się przez to nie włamie... .. i jest to dobre rozwiązanie, jednak co, jesli ktos chce zapisac plik o nazwie jaką on miał? ![]() ![]() -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
No dokładnie, nazwa powinna być unikalna
![]() -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 20:30 |