Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: upload, sprawdzenie pliku PRZED uploadem w php
Forum PHP.pl > Forum > PHP
zkr1965
Witam,
mam kod jak poniżej.
Sprawdzanie pliku działa, ale dopiero po załadowaniu pliku.
Czy i jak można to zrobić PRZED rozpoczęciem uploadu na server ?
Po stronie servera/php, nie w JS.

  1. <?php
  2. $file_tmp = $_FILES['fileToUpload']['tmp_name'];
  3. $file_name = $_FILES['fileToUpload']['name'];
  4. $file_size = $_FILES['fileToUpload']['size'];
  5. $targetPath = $_POST["sciezka"];
  6.  
  7. $extn = pathinfo($file_name, PATHINFO_EXTENSION);
  8. $whitelist = 'doc|docx|xls|xlsx|xlsm|pdf|jpg|jpeg|gif|png';
  9. $blacklist = 'php|php3|php4|phtml|exe';
  10. $IE4_9 = preg_match('/(?i)msie [4-9]/',$_SERVER['HTTP_USER_AGENT']);
  11. if( preg_match("/$blacklist$/i", $file_name) ) {
  12. $msg = $extn.' Rozszerzenie zabronione (blacklist)';
  13. if($IE4_9) { // if IE<=9
  14. echo "<script type='text/javascript' > parent.IEuploadError('".$msg."'); </script>";
  15. exit(0);
  16. }
  17. echo $msg;
  18. exit(0);
  19. }
  20. if( !preg_match("/$whitelist$/i", $file_name) ) {
  21. $msg = $extn.' Rozszerzenie niedozwolone (whitelist)';
  22. if($IE4_9) { // if IE<=9
  23. echo "<script type='text/javascript' > parent.IEuploadError('".$msg."'); </script>";
  24. exit(0);
  25. }
  26. echo $msg;
  27. exit(0);
  28. }
  29.  
  30. if (is_uploaded_file($file_tmp)) {
  31. $plikBezSciezki = basename($file_name);
  32. move_uploaded_file($file_tmp, $targetPath.$plikBezSciezki);
  33. $wynik = 1; //echo "Plik zostł zładowany poprawnie...";
  34. } else {
  35. $wynik = 0; //echo "Plik nie został załadowany...";
  36. }
  37. echo $wynik;
  38. ?>
freemp3
Nie da się. Trzeba wysłać plik, jak inaczej php ma go sprawdzić?
nospor
A niby jak serwer ma sprawdzic plik przed jego pobraniem?
zkr1965
Cytat(nospor @ 29.11.2013, 15:11:41 ) *
A niby jak serwer ma sprawdzic plik przed jego pobraniem?


Np. wysyłając (otrzymując) jedynie nazwę pliku przed właściwym uploadem ?
nospor
Tak czy siak musi to wyslac jakis kod js bo sam serwer sobie nie wysle.
pedro84
Pozwolę sobie tylko wtrącić, że Twoja walidacja dosyć słaba jest.
zkr1965
Cytat(pedro84 @ 29.11.2013, 16:45:31 ) *
Pozwolę sobie tylko wtrącić, że Twoja walidacja dosyć słaba jest.

Bo, ponieważ ?
pedro84
Cytat(zkr1965 @ 29.11.2013, 18:39:55 ) *
Bo, ponieważ ?

Sprawdzasz tylko rozszerzenie pliku co znaczy dosłownie tyle co nic. Chyba każdy użytkownik komputera potrafi zmienić rozszerzenie pliku.
zkr1965
Cytat(pedro84 @ 29.11.2013, 19:54:20 ) *
Sprawdzasz tylko rozszerzenie pliku co znaczy dosłownie tyle co nic. Chyba każdy użytkownik komputera potrafi zmienić rozszerzenie pliku.

Ale po co miałby to robić, co zyskać ?
Bo ja tą swoją (słabą) walidację robię aby ktoś nie podrzucił skryptu np. php i go nie uruchomił.
Możesz pokazać swoją walidację - tą mocniejszą, co sprawdzasz ?
pedro84
Nie ma czegoś takiego jak "moja". Tak się po prostu pliki waliduje. Oczywiście, jeszcze zależy od skali projektu, ale np.
- możesz sprawdzać mime-type choć tutaj sens mniej więcej taki jak przy rozszerzeniu, może ciutkę większy
- w przypadki obrazków, banalna metoda polegająca na sprawdzeniu co zwróci funkcja getimagesize

Poczytaj sobie też to (sprawdzasz pierwsze bity pliku):
http://www.mikekunz.com/image_file_header.html
http://stackoverflow.com/questions/3535231...file-validation
com
dokładnie tak jak pedro84 napisał, bo co z tego że wyśle Tobie plik o rozszerzeniu txt skoro mogę sobie w nim zmienić nagłówek i nic Ci, sprawdzenie samego rozszerzenia nie da smile.gif
zkr1965
Cytat(pedro84 @ 29.11.2013, 23:34:43 ) *
Nie ma czegoś takiego jak "moja". Tak się po prostu pliki waliduje. Oczywiście, jeszcze zależy od skali projektu, ale np.
- możesz sprawdzać mime-type choć tutaj sens mniej więcej taki jak przy rozszerzeniu, może ciutkę większy
- w przypadki obrazków, banalna metoda polegająca na sprawdzeniu co zwróci funkcja getimagesize

Poczytaj sobie też to (sprawdzasz pierwsze bity pliku):
http://www.mikekunz.com/image_file_header.html
http://stackoverflow.com/questions/3535231...file-validation


Fajne wskazówki, ale ja nie tylko waliduję obrazki - widać to po białej liście.
mime - sam wiesz ...
Jakieś inne dobre rady ?

Cytat(com @ 30.11.2013, 00:00:32 ) *
dokładnie tak jak pedro84 napisał, bo co z tego że wyśle Tobie plik o rozszerzeniu txt skoro mogę sobie w nim zmienić nagłówek i nic Ci, sprawdzenie samego rozszerzenia nie da smile.gif

ok, wyślesz plik z rozszerzeniem txt i co dalej z nim zrobisz ?
W sensie - czy coś złego możesz zrobić ?
mstraczkowski
Takie ciekawostki na temat getimagesize
Ta funkcja zbytnio nie nadaje się do walidacji obrazków.

http://gynvael.coldwind.pl/?id=223
http://gynvael.coldwind.pl/?id=224
http://gynvael.coldwind.pl/?id=235

Fajnym rozwiązaniem jest także sprawdzanie początkowych bajtów pliku
A dokładniej chodzi mi o sprawdzanie Magic Numbers

@edit: ups nie zauważyłem, że pedro84 już o tym wspominał smile.gif

Sprawdzanie mime oraz rozszerzenia to może być tylko ew. dodatek.
Ponieważ obie rzeczy łatwo można podmienić
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.