Je suis de la programmation d'un script d'upload d'images pour mon application. Sont les suivantes étapes de sécurité suffisamment pour en faire la demande à l'abri de l'script côté?
- Désactiver PHP en cours d'exécution à l'intérieur du dossier de téléchargement à l'aide .httaccess.
- Ne pas autoriser le transfert si le nom de fichier contient la chaîne "php".
- Autoriser uniquement les extensions sont: jpg,jpeg,gif et png.
- Autoriser uniquement type de fichier image.
- Interdire image avec deux type de fichier.
- Changer le nom de l'image.
- Télécharger vers un sous-répertoire ne répertoire racine.
C'est mon script:
$filename=$_FILES['my_files']['name'];
$filetype=$_FILES['my_files']['type'];
$filename = strtolower($filename);
$filetype = strtolower($filetype);
//check if contain php and kill it
$pos = strpos($filename,'php');
if(!($pos === false)) {
die('error');
}
//get the file ext
$file_ext = strrchr($filename, '.');
//check if its allowed or not
$whitelist = array(".jpg",".jpeg",".gif",".png");
if (!(in_array($file_ext, $whitelist))) {
die('not allowed extension,please upload images only');
}
//check upload type
$pos = strpos($filetype,'image');
if($pos === false) {
die('error 1');
}
$imageinfo = getimagesize($_FILES['my_files']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg'&& $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
die('error 2');
}
//check double file type (image with comment)
if(substr_count($filetype, '/')>1){
die('error 3')
}
// upload to upload direcory
$uploaddir = 'upload/'.date("Y-m-d").'/' ;
if (file_exists($uploaddir)) {
} else {
mkdir( $uploaddir, 0777);
}
//change the image name
$uploadfile = $uploaddir . md5(basename($_FILES['my_files']['name'])).$file_ext;
if (move_uploaded_file($_FILES['my_files']['tmp_name'], $uploadfile)) {
echo "<img id=\"upload_id\" src=\"".$uploadfile."\"><br />";
} else {
echo "error";
}
Toutes les astuces sont les bienvenues :)