PHP téléchargement d'image de sécurité liste de contrôle

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 permettent pas de télécharger si le nom de fichier contient la chaîne "php".
  • Autoriser uniquement les extensions sont: jpg,jpeg,gif et png.
  • Permettre uniquement un type de fichier d'image.
  • Interdire image avec deux type de fichier.
  • Changer le nom de l'image.
  • De 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";
}

Tout nouveaux conseils sont les bienvenus 🙂

  • Je voudrais supprimer la règle suivante: Ne pas autoriser le transfert si le nom de fichier contient la chaîne "php". Il n'est pas nécessaire parce que vous êtes en renommant le fichier.
  • Vous pouvez télécharger Sécuriser le transfert d'Image à partir de github. C'est le plus sûr script PHP vivant. Il prend en charge l'image de re-dimensionnement/croping trop.
  • À partir d'un rapide coup d'œil à cette catégorie de la sécurité que je peux voir, c'est une extension de vérifier. S'il vous plaît, s'il vous PLAÎT dire qu'il n'est pas vrai!
  • Ce n'est pas vrai. Dans quel sens? le pathinfo(, PATHINFO_EXTENSION) est une très bonne façon d'obtenir le plus précis extension de fichier, en fait il n'y a rien de plus fiable que cela. lire, où il est dit note
  • Si j'ai quitté la sécurité de mon serveur vers le bas à une extension de vérifier je ne serais pas capable de dormir la nuit est ce que je dis
  • Eh bien, si vous n'êtes pas assez intelligent pour ne pas donner à vos dossiers d'autorisation pour l'exécution des fichiers, la je suis d'accord. Vous ne devriez pas dormir 🙂
  • Je suis assez intelligent cependant, je ne suis pas concordants laissant un tel risque à une simple vérification qui peut laisser le code de l'exécutable sur votre serveur qui pourrait être un maillon très important dans une chaîne qui permet de fuite de choses comme les détails de compte, la plupart du monde réel hacks ne viennent pas d'une vulnérabilité, mais quelques utilisés conjointement. EDIT: je vois votre Suisse, bon 🙂
  • Je ne suis pas Suisse :). Pourquoi ne pas télécharger les classes et essayez de votre mieux pour la battre? Je suis vraiment intéressé de savoir comment il peut être exploité. Je ne suis pas sûr à 100%, comme je suis en PHP débutant. Mais, je veux utiliser la classe dans des projets d'avenir donc, je voudrais savoir
  • Juste assez 🙂 en fait, je suis actuellement à l'élaboration d'une sécurité de téléchargement d'images, de stockage, et de servir de classe en PHP, donc je suis très paranoïaque lors de la lecture de la façon dont toutes ces vérifications peuvent être contournées. Si vous utilisez le script, assurez-vous de stocker les images à côté de la racine du document et de les afficher à l'aide de PHP, encadrez quelque chose se passe
  • Bien sûr, laissez-moi vérifier votre code lorsque vous avez terminé. J'ai besoin d'apprendre autant que possible. Je pense que mon script est sûr, mais il peut être très améliorée. Donc, j'ai besoin de le comparer avec les autres
  • l'ofc & btw j'aime le Luc 3:11 licence 🙂

InformationsquelleAutor usef_ksa | 2010-11-12