La documentazione PHP per is_uploaded_file dice:
Returns TRUE if the file named by filename was uploaded via HTTP POST. This is useful to help ensure that a malicious user hasn't tried to trick the script into working on files upon which it should not be working--for instance,
/etc/passwd
.
Suggerisce anche questo:
For proper working, the function is_uploaded_file() needs an argument like $_FILES['userfile']['tmp_name'], - the name of the uploaded file on the client's machine $_FILES['userfile']['name'] does not work.
Ma per quanto ne so, tmp_name
non è comunque controllato dall'utente, quindi il controllo non dovrebbe essere richiesto.
E se utilizzo name
invece di tmp_name
durante il caricamento di file (ad esempio utilizzando copy
anziché move_uploaded_file
), il mio script di caricamento file non funzionerebbe in realtà, in quanto sposterebbe sempre la parte sbagliata file.
Le mie domande:
- I commenti menzionano che
move_uploaded_file
esegue la verifica diis_uploaded_file
, vero? - È
tmp_name
controllato dall'utente in qualche modo? - Esiste uno scenario realistico in cui
is_uploaded_file
è effettivamente richiesto quando si carica un file - o quando si esegue qualsiasi altra azione come la lettura, l'eliminazione, ecc., in quanto vi sarebbe una vulnerabilità senza di essa? O la funzione è completamente inutile?