ďťż

Bezpieczne wysyłanie obrazów na serwer Przede wszystkim zdjęcia i awatary

       

Podstrony


telcocafe

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?



if ( !empty( $thefiles_name[$nIndex] ) ) { $aType = $thefiles_type[$nIndex]; if ( ( $aType == "image/gif" ) || ( $aType == "image/pjpeg" ) || ( $aType == "image/jpeg" ) ) { $aNewName = $aBasePath . "nowe_pliki/" . $thefiles_name[$nIndex]; copy( $thefiles[$nIndex], $aNewName ); $aNewNames[] = $thefiles_name[$nIndex]; } else echo ("Można wysłać tylko lpiki *.jpg lub *.gif"); } }

getimagesize wymaga GD? ;) Co do ładowania wystarczy sprawdzić rozszerzenie. Plik PHP o rozszerzeniu .jpg nie będzie przecież wykonany. Dodatkowo getimagesize by zobaczyć czy to ma coś wspólnego z grafiką i ma rozmiary sensowne.
Pod Pythonem PIL ;)

Funkcja uznaje plik jako obraz, nawet gdy zawiera kod PHP. Jeśli serwer jest źle skonfigurowany, wtedy jest problem. Chcę ochronić zarówno serwer jak i użytkowników.

Co myślicie na temat użycia mime_content_type()? Znalazłem też exif_imagetype(), ale chyba nie zapewnia, że to obraz, prawda? OK - getimagesize() może nie wymaga GD, ale chcę dobrze zabezpieczyć skrypt, używając jak najmniejszą ilość funkcji, by nie komplikować kodu.



chyba nie łapiesz - jeżeli plik ma rozszerzenie *jpg czy *png itp. to może zawierać sobie ile chce PHP. I tak nie zostanie on wykonany. Sprawdzasz "fizyczne" rozszerzenie pliku i jako dodatek możesz sprawdzać czy getimagesize() zwróci wys/szer grafiki większą od zera. I to starczy.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.