In PHP esiste una procedura specifica ma errata per gestire le dimensioni dei file per l'upload.
Partiamo dall'esempio canonico della documentazione:
<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
Il controllo avviene confrontando il valore di $_FILES['userfile']['error']
: se è UPLOAD_ERR_FORM_SIZE ossia 2, il file che si sta cercando
di uploadare supera in byte la dimensione specificata nel campo del form MAX_FILE_SIZE
.
Tuttavia fare affidamento solo su questo campo non impedisce l'invio remoto del form con un valore molto più grande per MAX_FILE_SIZE
. Per prevenire questo tipo di exploit
occorre utilizzare anche (e soprattutto) una validazione su $_FILES['userfile']['size']
verificando che non
superi il valore massimo consentito o che generi gli errori UPLOAD_ERR_INI_SIZE
o UPLOAD_ERR_NO_FILE
.