ciao a tutti!
Son sempre riuscito a fare gli upload in php, ma mi son sempre chiesto una cosa...
che differenza c'è tra il fare il controllo del mime type o dell'estensione?
grazie![]()
ciao a tutti!
Son sempre riuscito a fare gli upload in php, ma mi son sempre chiesto una cosa...
che differenza c'è tra il fare il controllo del mime type o dell'estensione?
grazie![]()
la differenza e' che il controllo sul mime lo fanno solo i pivelli![]()
tutto qua?ma se io li so fare tutte e due cosa mi conviene fare?
per la sicurezza?
Allora:
Il controllo sul tipo di file caricato si fa per due motivi:
a) per accettare solo file che ci si aspetta
b) per non accettare file pericolosi
Mettiamo che tu stai sviluppando un'applicazione dove gli utenti ti caricano archivi, e vuoi accettare solo zip/rar.
Ora, se tu fai il controllo sul mime, quest'ultimo, essendo un dato inviato dal browser, e' facilmente modificabile. Quindi uno puo' tranquillamente caricarti un file qualcosa.php con il mime application/zip.
Se tu salvi sto file sul disco del server, sei messo male: gli hai dato la possibilita' di chiamare tuosito.it/qualcosa.php con qualsiasi codice dentro.
Se invece fai il controllo sull'estensione, anche se uno ti carica il file qualcosa.php cambiando estensione (quindi qualcosa.zip) non se ne fa niente del file caricato, perche' il server non interpreta il file come php.
Poi naturalmente si possono fare dei controlli aggiuntivi in base ai file che ci si aspetta.
In conclusione:
Fare solo controllo sul mime - male
Fare controllo sull'estensione - bene
Fare controllo sul mime dopo aver fatto quello sull'estensione - inutile. E poi considera anche che a volte il mime non funziona come ti ci aspetti anche in casi "legali", ad esempio ie per le jpeg manda una mime tutta sua (image/pjpeg o qualcosa del genere, non ricordo piu' - il punto e' che manda un'altro mime rispetto agli altri browser)
aaaaaaaaaaaaaa... sei stato esaustivo... per curiosità e completezza quali altri tipi di controlli si possono fare per verificare se il file è davvero quello che vogliamo?
Beh, come dicevo, dipende dal file che devi accettare. Se tu devi processare in qualche modo il file in input - farai nello stesso tempo anche dei controlli.
Ad esempio: ti aspetti immagini in input, jpeg gif e png. Immagino vorrai forse ridimensionarle, oppure almeno vedere che dimensioni hanno, o recuperare qualche altra informazione. Allora chiamerai qualche funzione tipo imagecreatefromjpeg/gif/png oppure getimagesize. Se queste funzioni ti restituiranno false - significa che non ti hanno caricato un'immagine valida.
Altro esempio: ti aspetti archivi zip. Chiamerai una funzione tipo zip_open (Se hai l'estensione installata) - se fallisce - non e' uno zip.
Poi ovviamente ci sono casi quando non puoi fare controlli - tipo sui .doc se non sei su windows con le estensioni necessarie, o sui .pdf, oppure vuoi accettare qualsiasi estensione tranne php, o che ne so ancora - in questo caso te ne fai una ragione; ma almeno se fai il controllo primario sull'estensione come ho detto nell'altro post, resti sicuro che non ti bucano il sito (o almeno non da qua)
ok perfetto! grazie![]()