Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Skrypt uploadu - blokowanie uploadowania innych plikow niz obrazki
Forum PHP.pl > Forum > Przedszkole
o2w5n778
Witam!
Czy ktoś może wie co zrobic aby w tym skrypcie dało się uploadować tylko obrazki?

Kod:
  1. <?
  2. $site ="http://adres.pl/"; // adres strony na kocu pamitaj o /
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  8. <title>Dokument bez tytuu</title>
  9. </head>
  10.  
  11. <body>
  12.  
  13. <?php
  14. if ($_POST['dodaj']) {
  15.  
  16. $plik_nazwa = trim($_POST['plik_nazwa']);
  17. $plik_tmp = $_FILES['foto']['tmp_name'];
  18. $plik_nazwa = $_FILES['foto']['name'];
  19. $ext = pathinfo($plik_nazwa, PATHINFO_EXTENSION);
  20. $kodowanie = md5($_POST['plik_nazwa']);
  21. $lacz = $kodowanie.$ext;
  22.  
  23. if(is_uploaded_file($plik_tmp)) {
  24. move_uploaded_file($plik_tmp, "../uploads/galeria/$lacz");
  25. echo "Plik: <strong>$plik_nazwa</strong> zosta przesany na serwer!<br>";
  26. print 'link dla forum: <input type="text" value="'.$site.''.$plik_nazwa.'" size="40" /><br>';
  27. print 'link dla przegldarki: <input type="text" value="'.$site.''.$plik_nazwa.'" size="40" /><br>';
  28. print 'kod dla html: <input type="text" value="<img src=&quot;'.$site.''.$plik_nazwa.'&quot; alt=&quot;aduje&quot; />" size="40" /><br>';
  29. /* Komenda Sprawdzajca Dziaanie Uploadu Zdjcia */
  30. }
  31.  
  32. }
  33. ?>
  34.  
  35. <div id="okno">
  36. <form enctype="multipart/form-data" action="index.php" method="POST" name="newad">
  37. <div class="oknoDane">
  38. <p class="oknoDanePotrzebne">Podaj Potrzebne Dane:</p>
  39. <table><tr>
  40. <td><table><tr>
  41. <td>fotografia:</td><td><input type="file" name="foto" class="nazwy" /></td></tr></table></td>
  42. </tr></table>
  43. </div>
  44. <div class="pagesPrzyciski">
  45. <input type="submit" name="dodaj" class="pages" value="Dodaj" />
  46. <input type="reset" class="pages" value="Resetuj" />
  47. <input type="button" class="pages" onclick="java script:history.back();" name="wstecz" value="Wstecz" />
  48. </div>
  49. </form>
  50. </div>
  51. </body>
  52. </html>
lepmajster
heh temat rzeka jak to mowia.
Jesli chcesz na prostej zasadzie to sprawdzasz rozszerzenie i typ MIME.
A jesli chcesz sie zabezpieczyc przed hakierami, to poszukaj sobie na tym forum, bo sporo bylo o tym pisane.
o2w5n778
nie moge tego znalezc ;/
Johnas
Dodaj do pliku z uploadem:
  1. $odczyt = pathinfo($plik_tmp);
  2. echo $odczyt['extension'].'<br />'; // to tylko, żeby zobaczyć jakie jest rozszerzenie
  3. $ext = $odczyt['extension'];
  4.  
  5. if ($ext !="jpg" && $ext !="pjpeg" && $ext !="jpeg" && $ext !="gif")
  6. {
  7. $error = true;
  8. $errorMsg .= 'Niedozwolone rozszerzenie pliku! Dozwolone pliki to: JPG lub GIF.<br />';
  9. $errorMsg .= 'Nazwa Twojego pliku to: ' .$plik_nazwa. ', rozserzenie: ' .$ext. '<br />';
  10. $file_upload="false";
  11. }


A gdzie a być wyświetlany błąd:
  1. if ($error == true)
  2. {
  3. echo $errorMsg . '<br />';
  4. }


Polecam Bezpieczny Upload= Broszurka
o2w5n778
albo ja to źle wstawiam albo to zły kod, to nic nie daje
Pilsener
Zapomnij o takim uploadzie, bo jakiś dzieciak albo bot w 5 minut Ci się włamie. Zasada jest prosta i jedyna: wrzucać pliki do bezpiecznego folderu (takiego, gdzie wpisanie folder/plik.jakis nic nie da pomimo poprawnej ścieżki).

A jak sprawić, by były tylko fotki?
1. Zapisujesz plik w bezpiecznym folderze
2. Sprawdzasz jego typ MIME, metod jest wiele, choćby imagickiem:
  1. $picture = new Imagick('safe_folder/1234');
  2. $extension = $picture->getimageformat();
albo przy pomocy "gołego" php:
http://pl.php.net/manual/pl/function.finfo-file.php
Albo przy pomocy biblioteki GD
3. Jeśli typ jest zgodny, to zapisujesz do bazy informację o nim, jeśli nie - plik kasujesz i siema
4. Przy downloadzie pobierasz plik z bezpiecznego folderu i wysyłasz jako obrazek (gif, jpg, png - info o tym pobierasz z bazy), nawet jeśli będzie to jakiś złośliwy kod wysyłając go w taki sposób:
  1. $img = file_get_contents($path);
  2. header('Content-Type: image/jpeg');
  3. echo $img;
- dzieciak może nam skoczyć
Johnas
Ja mam taki upload plików img. Nie dość że sprawdzam czy plik jest grafiką to zmieniam chmody na 600 automatycznie. Przeczytaj broszurkę co Ci podałem dwa posty wyżej to tam pisze jak jeszcze możesz upload zabezpieczyć plikiem .htaccess tak aby skrypt złośliwy był pokazywany jako text.

  1.  
  2. <h2>&raquo;YouPhoto-Dodaj zdjęcie</h2>
  3. <div class="content">
  4.  
  5.  
  6. <form class="form" action="upload.php" method="post" enctype="multipart/form-data" onsubmit="openProgressBar(); return true;">
  7.  
  8. <br>Dodaj zdjęcie:<br>
  9. <p>
  10. <input type="file" name="userfile" size="40">
  11. </p>
  12.  
  13. <p class="submit2">
  14. <input type="submit" name="submit" value="Submit">
  15. </p>
  16. </form>
  17.  
  18. <?
  19. if($_POST){
  20.  
  21.  
  22.  
  23. $uploaddir = 'img/';//katalog gdzie ma być wgrane zdjęcie chmod ustaw na 777
  24. $rand=rand(100,999);
  25.  
  26.  
  27.  
  28. $uploadfile = $uploaddir.$rand.$_FILES['userfile']['name'];
  29. $userfile =$_FILES['userfile']['name'];
  30. $ext = substr( $userfile, strrpos( $userfile, '.' ) );
  31.  
  32.  
  33.  
  34. $mime = $_FILES[ 'userfile' ][ 'type'];
  35.  
  36. if( strpos( $mime, 'image/' ) === false )
  37. die( 'Wybrany plik nie jest obrazkiem.' );
  38.  
  39.  
  40. if (move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){
  41. chmod( $uploadfile, 0600 );
  42.  
  43. if( is_uploaded_file( $_FILES[ 'file' ][ 'tmp_name' ] ) )
  44.  
  45.  
  46.  
  47. print "Opis: <b>$opis</b><br>";
  48. print "Lokalizacja: <b>$uploadfile</b><br>";
  49. print "Twoje ID: <b>$id_usera</b><br>";
  50. print "Numer dodany: <b>$rand</b><br></p>";
  51. echo '<center> <strong>"'.$_FILES['userfile']['name'].'"</strong>Zdjęcie Zostało dodane poprawnie.';
  52.  
  53.  
  54. }else {
  55. print "<center><font color=red><strong>Coś jest nie tak, spróbuj ponownie!</font>";
  56.  
  57. }
  58. }
  59.  
  60.  
  61. ?>
o2w5n778
A jak zabezpieczyć ten mój skrypt?
thek
Poczytaj, pomyśl, spróbuj choć trochę sam zmienić. Forum w tym dziale to nie gotowce, ale wskazówki, podpowiedzi co zmienić lub poprawić. Ludzie dali Ci ich tyle, włącznie z kodami przykładowymi, że aż wstyd pytać się "jak mój zmienić?", bo to oznacza, że nawet nie chciało Ci się spróbować cokolwiek tknąć, tylko liczysz na gotowca. Nie bądź pasożytem smile.gif
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.