Per evitare errori nel download dei file con PHP occorre procedere per step.
Ipotizziamo di voler consentire il download di un file. Avremo:
function my_is_valid_download_file($file, $path, $extension, $mimetype) {
$full_path = $_SERVER['DOCUMENT_ROOT'] . $path;
if(!isset($file) || empty($file)) { // Verifica presenza della variabile
return false;
}
$file_name = trim($file);
$file_full_path = $full_path . $file_name;
// 1
if(stristr($file_name, $extension) === false) {
return false;
}
// 2
if(!file_exists($file_full_path) || !is_readable($file_full_path)) {
return false;
}
// 3
if(mime_content_type($file_full_path) !== $mimetype) {
return false;
}
return true;
}
- Verifica di base. Il file richiesto ha l'estensione attesa?
- Verifica intermedia. Il file richiesto esiste ed è accessibile in lettura?
- Verifica finale. Il file richiesto possiede il contenuto MIME atteso?
Il terzo step è una verifica di integrità finale. Dobbiamo essere sicuri che il file richiesto sia effettivamente valido e non ad esempio un file PHP come è avvenuto in passato con il plugin WordPress di Revolution Slider.