Sécuriser les extensions images

Eléphant du PHP | 233 Messages

10 févr. 2012, 11:25

Bonjour,
je voudrais sécuriser l'upload de mes images, voici le fichier actuel :
Merci de vos suggestions...
:wink:
<?php

$repdossier = $_GET['repdossier'];

$uploaddir = 'upload/'.$repdossier.'/';

$file = $uploaddir . basename($_FILES['uploadfile']['name']); 

$dir2 = opendir("upload/$repdossier/");

$getpages=0;

while ($File = readdir($dir2)){
                                if($File != "." && $File != ".." && $File != "" )
                                  { $getpages++;
                                   
                                  }
								  
				  }

closedir($dir2);

$calcul = $getpages;

if( @is_file($file) )
{
echo "error2";
}
else

{

if( $calcul >= 5)
{
echo "error1";
}

else

{


 
if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file)) { 
  echo "success"; 
} else {
	echo "error";
}
}



}

?>

ViPHP
xTG
ViPHP | 7331 Messages

10 févr. 2012, 11:37

Tu peux vérifier l'extension du fichier ainsi que le type MIME (ce dernier se trouve dans $_FILES).

Par contre je ne vois pas tellement l'utilité de ton code sur le répertoire.
C'est pour vérifier son existence et compter le nombre de fichier dedans ?
is_dir() te permettra de vérifier l'existence.
Et avec glob() tu récupéreras un array des fichiers suivant un motif, reste plus qu'à utiliser la fonction count() sur cet array.

Aussi il serait préférable de vérifier la valeur récupérée dans $_GET.
Car là il suffit de modifier l'url pour uploader n'importe où sur ton serveur. ;)

Eléphant du PHP | 233 Messages

10 févr. 2012, 11:50

En faite je n'ai pas de base de donnée, les images sont stockées dans un dossier créé aléatoirement.
Le code sur le répertoire me sert à compter le nombre d'image uploadée et de les limiter à 5 avec un autre fichier.
Mes extensions sont vérifiées également sur l'autre fichier ci-dessous, mais du coup comme c'est du java, elles ne sont pas sécurisées.

Je voudrais donc sécuriser l'upload avant de contrôler les extensions dans le fichier all-index.php
<?php

$repdossier = $_GET['repdossier'];

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>AJAX File Upload - Web Developer Plus Demos</title>
<script type="text/javascript" src="js/jquery-1.3.2.js" ></script>
<script type="text/javascript" src="js/ajaxupload.3.5.js" ></script>
<link rel="stylesheet" type="text/css" href="./styles.css" />
<script type="text/javascript" >
	$(function(){
	var btnUpload=$('#upload');
		var status=$('#status');
		new AjaxUpload(btnUpload, {
<?php
echo "action: 'upload-file.php?repdossier=".$repdossier."',";
?>

			name: 'uploadfile',
			onSubmit: function(file, ext){
				 if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext))){ 
                    // extension is not allowed 
					status.text('Les extentions possible sont JPG, PNG ou GIF');
					return false;
				}
				status.html('Envoi en cours merci de patienter <img src="images/loadingup.gif?<?php echo md5(time()); ?>" border="0" height="6" width="19">');
			},
			onComplete: function(file, response){
				//On completion clear the status
				status.text('');
				//Add uploaded file to list
				if(response==="success"){
					$('<li></li>').appendTo('#files').html('<img src="miniature.php?pic=upload/<?php echo $repdossier; ?>/'+file+'&w_max=70&h_max=60" height="60" width="70" alt="" /><br />').addClass('success');
				} 
                                 if(response==="error1"){
					alert("Vous avez déjà 5 photos pour votre annonce !\nLe maximum de photos autorisées est de 5 !")
				} 
                                if(response==="error2"){
				        alert("La photo selectionnée existe déjà\nRe-selectionnez une autre photo !")
				} 
			}
		});
		
	});
</script>
</head>
<body>

<div id="mainbody" >




<div id="upload" ><span>Ajouter des photos<span></div><span id="status" ></span>

		 <ul id="files" ></ul>
</div>

</body>

</html>




Eléphant du PHP | 233 Messages

12 févr. 2012, 00:20

Tu peux vérifier l'extension du fichier ainsi que le type MIME (ce dernier se trouve dans $_FILES).

Par contre je ne vois pas tellement l'utilité de ton code sur le répertoire.
C'est pour vérifier son existence et compter le nombre de fichier dedans ?
is_dir() te permettra de vérifier l'existence.
Et avec glob() tu récupéreras un array des fichiers suivant un motif, reste plus qu'à utiliser la fonction count() sur cet array.

Aussi il serait préférable de vérifier la valeur récupérée dans $_GET.
Car là il suffit de modifier l'url pour uploader n'importe où sur ton serveur. ;)
Bonsoir,
est-il possible d'avoir un bout de code pour exemple ?
Merci d'avance... :roll: