Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Skrypt uploadu - blokowanie uploadowania innych plikow niz obrazki
o2w5n778
post 3.08.2010, 22:05:30
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

Ostrzeżenie: (0%)
-----


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>


Ten post edytował o2w5n778 3.08.2010, 22:06:06


--------------------
Go to the top of the page
+Quote Post
lepmajster
post 3.08.2010, 22:13:08
Post #2





Grupa: Zarejestrowani
Postów: 129
Pomógł: 24
Dołączył: 21.05.2010

Ostrzeżenie: (30%)
XX---


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.


--------------------
Naciśnij POMÓGŁ, jeśli mój post był pomocny :)
Go to the top of the page
+Quote Post
o2w5n778
post 3.08.2010, 22:21:01
Post #3





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

Ostrzeżenie: (0%)
-----


nie moge tego znalezc ;/


--------------------
Go to the top of the page
+Quote Post
Johnas
post 3.08.2010, 23:00:48
Post #4





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

Ostrzeżenie: (0%)
-----


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

Ten post edytował Jonek_1993 3.08.2010, 22:53:33


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
o2w5n778
post 4.08.2010, 08:25:55
Post #5





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

Ostrzeżenie: (0%)
-----


albo ja to źle wstawiam albo to zły kod, to nic nie daje


--------------------
Go to the top of the page
+Quote Post
Pilsener
post 4.08.2010, 08:50:30
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
Johnas
post 4.08.2010, 10:43:45
Post #7





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
o2w5n778
post 4.08.2010, 10:51:42
Post #8





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

Ostrzeżenie: (0%)
-----


A jak zabezpieczyć ten mój skrypt?


--------------------
Go to the top of the page
+Quote Post
thek
post 4.08.2010, 11:50:12
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 03:57