Jak zabezpieczyć upload przed atakiem?

Ostatnio założyłem upload, skrypt wziąłem z forum (ten na końcu, od daroo) i ktoś przeprowadził atak hakerski wysyłając pliki costam.php, costam2.js i costam2.js" (jakoś tak, po usunięciu znowu działa). Dodałem niby-zabezpieczenie:

$sp = explode(".",$_FILES['Plik][‘name’]);

if($sp[1] != “php” and $sp[1] != “html” and $sp[1] != “js”) {//instrukcje upload’u} else echo(“Plik niepoprawny”);

Myślę, że to nie rozwiązuje mojego problemu. Może mi ktoś pomóc, żeby ustrzec się przed kolejnym atakiem?

Z góry dziękuję

myślę, że jeżeli już podążasz w tym kierunku, to filtrujesz w złą stronę, powinieneś był stworzyć tablicę poprawnych rozszerzeń i przepuszczać tylko te pliki których rozszerzenia się zgadzają

chociaż lepsze było by chyba sprawdzenie odpowiedniego MIME TYPE danego pliku i przepuszczanie tylko tych prawidłowych:

$finfo = finfo_open(FILEINFO_MIME); 

$mimetype = finfo_file($finfo, $_FILES['Plik']['name']);

finfo_close($finfo);

$ext = array("image/jpeg", "image/png", "image/gif");

if(in_array($mimettype, $ext)){

//poprawny plik

} else {

//zły plik

}

zdaje się, że ja bym w ten sposób kombinował

EDIT: bym zapomniał: liste mime type

No i oczywiście użycie funkcji:

http://pl2.php.net/manual/pl/function.i … d-file.php

Możesz sprawdzać rozmiar pliku, żeby ktoś Ci nie przesłał nie wiadomo jak dużego.

  • oczywiście to co mówili przedmówcy - MIMETYPE i rozszerzenie.

Powinieneś też sprawdzać, czy nie zaistniał jakiś błąd, patrzac co jest w $_FILES[‘Plik’][‘error’]

Dziękuję za uwagi.

W formularzu jest ograniczenie.

To już było w kodzie, który skopiowałem

Trochę tego będzie, dlatego kombinowałem, żeby nie dopuszczać php i js (które jeszcze mogą zaszkodzić?)

może tak:

$finfo = finfo_open(FILEINFO_MIME);

$mimetype = finfo_file($finfo, $_FILES['Plik']['name']);

finfo_close($finfo);

$ext = array("application/x-javascript", "text/html", "text/php");

if(in_array($mimettype, $ext)){

//zły plik

} else {

//dobry plik

}