Sto implementando uno strumento di caricamento immagini basato sull'utente per il mio sito web. Il sistema dovrebbe consentire a tutti gli utenti di caricare solo file JPEG e PNG. Sono, ovviamente, preoccupato per la sicurezza e quindi mi chiedo come le persone più intelligenti di me pensano ai seguenti controlli per consentire i caricamenti:Funzionalità di caricamento immagini utente sicuro in PHP
1) Primo elenco bianco le estensioni di file consentite in PHP per consentire solo PNG, png, jpg, JPG e JPEG. Recuperare l'estensione del file dell'utente tramite una funzione come ad esempio:
return end(explode(".", $filename));
Questo dovrebbe aiutare a non consentire all'utente di caricare qualcosa di dannoso come .png.php. Passare al punto 2.
2) Eseguire la funzione php getimageize() sul file TMP. Via qualcosa come:
getimagesize($_FILES['userfile']['tmp_name']);
Se questo non restituisce falso, procedere.
3) Assicurare un file .htaccess viene posto all'interno della directory upload in modo che tutti i file all'interno di questa directory non può analizzare i file PHP:
php_admin_value engine Off
4) Rinominare file dell'utente a qualcosa di pre-determinato. OSSIA
$filename = 'some_pre_determined_unique_value' . $the_file_extension;
Ciò consentirà anche di evitare l'iniezione SQL poiché il nome file sarà l'unica variabile determinata dall'utente in tutte le query utilizzate.
Se eseguo quanto sopra, quanto sono vulnerabile per l'attacco sono ancora? Prima di accettare un file dovrei avere 1) permesso solo jpg e png, 2) verificato che PHP dice che è un'immagine valida, 3) disabilitato la directory in cui si trovano le immagini dall'esecuzione dei file .php e 4) rinominato il file degli utenti in qualcosa unico.
Grazie,
Si può usare strip_tags su un file immagine per rimuovere i tag PHP? –