upload zdjęć

0

Zbudowałem sobie bardzo ubogi skrypt do wgrywania obrazków na serwer. Teraz prośba o pomoc: jak zmodyfikować ten skrypt by przyjmował tylko formaty obrazów (jpg, jpeg, png, gif) oraz czy istnieje w ogóle taka możliwość jak ustawienie czasowe (np. co 1 h) dla każdego IP, które wysyła zdjęcie? Nie będzie skryptu rejestracji więc pewnie odbywałoby się spamowanie, a tak przynajmniej co określony czas. IP można wyciągnąć przez:

   if ($_SERVER['REMOTE_ADDR'] == '')
   {
      $ip = $_SERVER['REMOTE_ADDR'];
   } else $ip = $_SERVER['REMOTE_ADDR'];

ale niestety dalej już nie wiem, jeśli to jest zbyt skomplikowane lub inne uwarunkowania z przyczyn losowych nie pozwolą na budowę tego kodu to chociaż będę wdzięczny za część pierwszą mojego zapytania :P Najwyżej skrypt obejmę w CAPTCHA i myślę, że też by było ok.

Skrypt:

formularz.php

<form action="img.php" method="post" enctype="multipart/form-data">

Add image: <input type="file" name="images">
<br><input type="submit" value="Send">

</form>

img.php

<?php

include('mysql.php');

$file = $HTTP_POST_FILES["images"]["tmp_name"];
$zapisz = $HTTP_POST_FILES["images"]["name"];

if (!copy($file, "images/" . $zapisz)) {

print ("Kopiowanie nie powiodło się.<br>\n");
}

print "<BR>Nazwa pliku: ".$HTTP_POST_FILES["images"]["name"];
print "<BR>Rozmiar pliku: ".$HTTP_POST_FILES["images"]["size"];
print "<BR>tymczasowo: ".$HTTP_POST_FILES["images"]["tmp_name"];
print "<BR>Typ przesłanego pliku: ".$HTTP_POST_FILES["images"]["type"];

$query = "INSERT INTO images (filename) VALUES ('$zapisz')";
mysql_query($query);

echo "Dodawanie zakonczone";

?>
0

Sprawdź typ mime i ciąg po ostatniej kropce w nazwie pliku (zwany również rozszerzeniem).
Btw. $HTTP_ jest zdeprecjonowane, używaj po prostu $_FILES.

0

niezłe, jednocześnie można Ci wgrać na serwer plik php oraz napsuć w bazie danych przy pomocy sql injection ;)

edit: "ustawienie czasowe"
zapisuj sobie godzine i ip wrzucenia zdjęcia. potem sprawdzasz czy w ostatniej godzinie to ip wrzucilo zdjecie czy nie. nie rozumiem z czym problem ;)

0

Btw2.:

  if ($_SERVER['REMOTE_ADDR'] == '')
   {
      $ip = $_SERVER['REMOTE_ADDR'];
   } else $ip = $_SERVER['REMOTE_ADDR'];

Przecież to durnota, ciała if i else są równoważne...

@dzek69: To zależy jak serwuje te zdjęcia. Jeśli jakimś cudem typu force-download to możesz wszystko wrzucić przez ten uploader i mieć gwarancję tego, że nic się nie wykona. No i serwerowi można ustawić, że z tego i tego katalogu leci tylko static content.

Nie zmienia to faktu, że SQL Injection jest, a akapit powyżej to zapewne moje optymistyczne wymysły i żadnej weryfikacji nie ma :(

0
if ($_SERVER['REMOTE_ADDR'] == '')

a to się zdaje nigdy nie spełni, chyba, że sam nadpiszesz sobie tę superglobalkę.

ja napisałem, że się da wgrać plik php ;)

0

tak, tak, wiem, tylko nie wiem jak to zrobić :P
z tym IP to raczej cięższa sprawa ;x

0

w dodatku wrzucasz wszystkie pliki do tego samego katalogu. jak - jeśli - będziesz mieć ich tam kilkadziesiąt tysięcy to poczujesz radość. a przy kilkuset tysiącach będziesz biegał w kółko machając rękami wydając z siebie wrzaski.
i nie copy(), a move_uploaded_file(). to dość podstawowy błąd. proponuję Ci poczytać jakiś tutorial.

1 użytkowników online, w tym zalogowanych: 0, gości: 1