ottimi i suggerimenti di alcio74, ma lasceri funzionante il controllo con getimagesize().
Parto dal fatto che chi esegue un upload potrebbe caricare qualche file assassino dal nome fittizzio p.es un ciccio.exe chiamarlo bravo.jpg
qualsiasi controllo avviene sulla stringa del nome p.es. con pathinfo("nome")['extension'] restituisce l'estensione che è scritta e dopo averla confrontata con quelle ammissibili (jpg, jpeg, gif, png, bmp e con php5.2 anche ico) se la beve.
Con getimagesize() legge la vera estensione .
Secondo me è da mettere un controllo nell'input type file.
Va bene limitare con un size, metterei anche
$n=trim("nome") // elimina gli spazi terminali ... e quindi un upload con il focus ma in bianco
strip_tags($n) // elimina i tag ... ed il loro contenuto
str_replace(" ", "", $n) // elimina gli spazi intermedi
substr($n, -30) // p.es. la lunghezza non supera i 30 caratteri (ho presente il size iniziale) compreso il punto e l'estensione
il MAX_FILE_SIZE nell'hidden, va messo ma è poco sicuro. se si può è meglio intervenire sul php.ini bilanciando upload_max_filesize con max_esecution_time
Questo è quello che so e posso dire.
ciao