Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]browse - ładowanie pliku
Forum PHP.pl > Forum > Przedszkole
Larges
Kod
$max_rozmiar = 1024*1024;
if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
   if ($_FILES['plik']['size'] > $max_rozmiar) {
   echo 'Błąd! Plik jest za duży!';
   } else {
         echo '<br><br><br><font color="CA0000" size="4"><center>News dodany!</font><br>';
         echo '<a href="dodaj_newsa.php">Dodaj kolejnego</a>';
   move_uploaded_file($_FILES['plik']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/foto/'.$_FILES['plik']['name']);
   }
} else {
      echo 'Błąd przy przesyłaniu danych!';
}



Nie wiem jak zrobić, aby na serwer można było ładować tylko image - gif, jpg. Bardzo prosiłbym o pomoc.

znalazłem w internecie:



Kod
Należy zauważyć, że ten skrypt jest wolny od zabezpieczeń i jeżeli folder do którego wysyłamy pliki jest dostępny z przeglądarki potencjalny włamywacz może wysłac niebezpieczny skrypt *.php i go wykonać. Najlepszym rozwiązaniem jest utworzyć folder poza drzewem katalogów i w nim trymac uploadowane pliki.


[b]poprawiona wersja kodu:[/b]

[img]http://compzone.org/images/numbers/2.png[/img] <?php
[img]http://compzone.org/images/numbers/3.png[/img] $rot = $_SERVER['DOCUMENT_ROOT'];
[img]http://compzone.org/images/numbers/4.png[/img]  
[img]http://compzone.org/images/numbers/5.png[/img] move_uploaded_file($_FILES['plik']['tmp_name'], "$rot/../wyslane/".$_FILES['plik']['name']);
[img]http://compzone.org/images/numbers/6.png[/img] ?>


- czy to zabezpiecza wystarczająco przed włamem? Ktoś może wgrać plik .php...
Czy mój wcześniejszy kod jest dobrze zabezpieczony? Proszę o odopwiedź.
xbigos
Przed wysłaniem formularza dać warunek przez np if(eregi($string, $string2)){}else{} polecam manulala pl.php.net/eregi
Larges
Nie bardzo mi to wyjaśnia sprawę.
devnul
ja używam funkcji getimagesize" title="Zobacz w manualu PHP" target="_manual do sprawdzenia typu danych/obrazka - rozpoznaje popularne formaty graficzne nawet (!) jeśli rozszerzenie będzie inne, np zdjęcie o nazwie "wakacje.exe" mimo iż jest poprawnym plikiem jpeg to nie przeszło by przez większość walidatorów ze względu właśnie na rozszerzenie a dzięki tej metodzie zostanie rozpoznane i przejdzie poprawnie. Polecam tylko zmianę rozszerzenia plików na właściwe dla danego typu już po dokonaniu uploadu żeby uniknąć innych kwiatków.
Larges
Kod
$plik_nazwa = $_FILES['plik']['name'];
echo "$plik_nazwa";
$sp = explode(".",$plik_nazwa);

// sprawdzamy rozszerzenie
if($sp[1] == "gif" or $sp[1] == "jpg" or $sp[2] == "JPG" or $sp[3] == "GIF") {
$spp = "1";
}
else {
$spp = "0";
}
if ($spp = "1") {
$max_rozmiar = 1024*1024;
if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
  if ($_FILES['plik']['size'] > $max_rozmiar) {
  echo 'Błąd! Plik jest za duży!';
  } else {

        echo '<br><br><br><font color="CA0000" size="4"><center>News dodany!</font><br>';
        echo '<a href="dodaj_newsa.php">Dodaj kolejnego</a>';
  move_uploaded_file($_FILES['plik']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/foto/'.$_FILES['plik']['name']);
  }
} else {
        echo '<br><br><br><font color="CA0000" size="4"><center>News dodany!</font><br>';
        echo '<a href="dodaj_newsa.php">Dodaj kolejnego</a>';
}
}
}


Co w tym kodzie może być złego?
jeśli dam if ($spp = "1") - ładuje się każdy plik, jeśli if ($spp == "1") - żaden.
Dziękuję za pomoc.
devnul
jeden znak = to przypisanie wartości - zawsze zwraca true w warunku logcznym bo wartość zostaje przypisana do zmiennej == równości to równe === to z kolei dokładnie takie jak/identyczne - nie następuje tu rzutowanie zmiennych na podobne typy
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.