Buongiorno a tutti.
Sto lavorando a una funzione per controllare i file in ingresso tramite upload immagini e validarli.
Per ora sono riuscito a controllare il mime, controllare che sia davvero un'immagine (con getfilesize) ed eliminare estensioni nocive.
Il problema è che riesco a far caricare immagini con codice php all'interno delle informazioni.
Prima di andare avanti vi posto lo script:
In pratica, grazie a questo script evito file del tipo: nome.php.jpg, oppure file php mascherati da immagine nomescript.png (dentro c'è solo codice php) e file con estensioni non volute: php, html, js, eccetera.Codice:
//dati del form//
$nome_file_temporaneo = $_FILES['file_inviato']['tmp_name'];
$nome_file_vero = basename($_FILES['file_inviato']['name']);
$dati_file = file_get_contents($nome_file_temporaneo);
$imgsize2 = getimagesize($nome_file_temporaneo);
echo 'filesize2? ';print_r($imgsize2);echo '<br>';
// Tutti i controlli : TYPE, MIME, ed ESTENSIONI INVALIDE
$checkall = 0;
echo '$checkall '.$checkall.'<br>';
if (
($imgsize2[mime] == "image/jpg") ||
($imgsize2[mime] == "image/png") ||
($imgsize2[mime] == "image/jpeg")
) {
echo 'OK 1<br>';
$checkall = $checkall +1;
}
else { echo'NO 1'; exit(); }
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (false === $ext = array_search(
$finfo->file($_FILES['file_inviato']['tmp_name']),
array(
'jpg' => 'image/jpeg',
'png' => 'image/png',
),
true
)
){
echo 'NO 2<br>'; exit();
}
else {
echo 'OK 2<br>';
$checkall = $checkall +1;
}
$blacklist = array(".php", ".phtml", ".php3", ".php4" , ".js" , ".json");
foreach ($blacklist as $item) {
if(preg_match("/$item\$/i", $nome_file_vero)) {
echo "NO 3 <br>";
exit;
}
else {
echo 'OK 3 <br>';
$checkall = $checkall +1;
}
}
if (getimagesize($_FILES['file_inviato']['tmp_name']) == false) {
echo'NO 4'; exit();
}
else {
echo 'OK 4 <br>';
$checkall = $checkall +1;
}
?>
MA, come dicevo, permette ancora di fare upload di file immagini validi al 100%, ma con codice nelle informazioni.
Adesso, volevo chiedervi (visto che non sono riuscito a trovare soluzioni) se c'è pericolo che si riesca a far eseguire gli script all'interno se io uso semplicemente:
<img src="/../nomeimaggine.png">
Grazie mille per eventuali risposte ;)