Page 1 sur 1

Sécuriser les extensions images

Posté : 10 févr. 2012, 11:25
par cris84
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";
}
}



}

?>

Re: Sécuriser les extensions images

Posté : 10 févr. 2012, 11:37
par xTG
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. ;)

Re: Sécuriser les extensions images

Posté : 10 févr. 2012, 11:50
par cris84
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>




Re: Sécuriser les extensions images

Posté : 12 févr. 2012, 00:20
par cris84
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: