Sécuriser les extensions images

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sécuriser les extensions images

Re: Sécuriser les extensions images

par cris84 » 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:

Re: Sécuriser les extensions images

par cris84 » 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>



Re: Sécuriser les extensions images

par xTG » 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. ;)

Sécuriser les extensions images

par cris84 » 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";
}
}



}

?>