UPLOAD IMAGE AVEC MINIATURE

cs_fenoril Messages postés 23 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 12 juin 2011 - 22 janv. 2011 à 16:58
 salim - 1 nov. 2014 à 14:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52746-upload-image-avec-miniature

Magnifique script il marche a 100%, merci
Qtronik Messages postés 16 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 8 mars 2011
5 févr. 2011 à 18:16
Bonjour,
@Fenoril Connais tu l'information pour ces autres failles ? Je suis curieux de savoir comment encore plus protêger mes upload d'images ou d'autre fichiers.

C'est que mon projet ne doit pas avoir aucune faille alors je prend toute les techniques et les joints ensemble dans une seul et parfaite formule. Ensuite je metterai le code le plus complet ici même pour ma partis de upload d'images.

Merci, et bonne journée ! C'est bcp l'hiver ici au Québec
cs_fenoril Messages postés 23 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 12 juin 2011
5 févr. 2011 à 18:03
beaucoup mieux comme ça... Aisément transformable en fonction ou méthode.

Reste encore un peu de manque de sécurité sur les extensions, mais qtronix et sagat06 on donné deux méthodes qui fonctionnent. Par ailleurs, autre moyen de faire des dégâts : Les caractères de hack (null byte etc...) dans le nom de fichier, mais comme ça prend du temps à mettre en place pour le hacker (car ça dépend de notrer code), c'est moins problématique.

Merci dilar !
cs_fenoril Messages postés 23 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 12 juin 2011
27 janv. 2011 à 22:22
Salut !

@ neige d'hiver, j'ai cessé la liste des erreurs parceque celles trouvées précédemment n'ont pas été corrigée depuis une semaine et que ce code ne peut PAS fonctionner en l'état. Je ne connais pas bien les fonctions d'image de php, j'espérais au passage les découvrir, aussi merci d'avoir relevé cette énormité, car du coup j'ai regardé la doc, et donc effectivement deux sorties écran d'image avant d'imprimer un texte... Je renonce...

@Qtronik Merci pour le lien vers la classe, elle est très instructive.
Qtronik Messages postés 16 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 8 mars 2011
26 janv. 2011 à 16:39
Ici il y a un code simple qui n'est pas un système complet... Pour les systemecomplet il y a d'autre site par exemple siduzero.com...
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
26 janv. 2011 à 12:32
Ca choque personne que dans le code de la source il y ait deux fois imagejpeg() ?
Et ça choque personne qu'ensuite il affiche du texte ?
Et tout ça, sans préciser le type mime au navigateur avec un header approprié...
Qtronik Messages postés 16 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 8 mars 2011
26 janv. 2011 à 03:48
Changer un script en classe c'est très facile ! Seulement pour une meilleur compréhension pour les débutant il est mieux de commencer en script tout cour sans "includes" ou mise en "classe".

Pour les bon connaisseurs de classe je crois que ce script ne les intéressent pas beaucoup... Si ce sont des classe que vous cherchez et bien le site phpclasses.com vous serait favorable !

Voici justement un lien vers une classe pour contrôler les images:
http://www.phpclasses.org/package/5548-PHP-Validate-and-process-uploaded-image-files.html

Bon codage facile...
Vonscott Messages postés 61 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 19 septembre 2011
25 janv. 2011 à 20:20
Aucune sécurité, sans parler de POO cela aurait pu etre au moins une classe.
Aucun intérét. "Niveau initié" mdr
Qtronik Messages postés 16 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 8 mars 2011
25 janv. 2011 à 16:12
Tu as raison

Ce que je voulais dire, fonctions, vriables, tout les choses que l'ont peut renommer soit même vont partis de l'aide a la compréension...

Désolé...

Je vais poster moi même le code extrêmement complet pour uploader une image transformer en deux image d tailles différentes pour deux dossier dans quelque instant. Soyez y ;o)
cs_fenoril Messages postés 23 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 12 juin 2011
25 janv. 2011 à 15:27
Hihi, j'enlève la surveillance par mail, je ne comprends plus grand chose à la discussion...

Deux exemples :
Sagat trouve que la méthode de récupération de l'extension de dilar est dangereuse mais... en fait il n'en propose pas puisque getExtension n'existe pas...
Qtronik trouve que les noms de fonctions excusent l'absence de commentaire, mais y'à pas de fonction dans le code...

Et surtout, vous avez l'air de trouver le code pas mal, mais en l'état il ne peut fonctionner, c'est quand même le truc le plus important pour l'instant non ?

Soit dit sans animosité, j'ai l'impression que vous l'avez un peu survolé quand même messieurs.
Qtronik Messages postés 16 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 8 mars 2011
25 janv. 2011 à 02:53
Voila de quoi aider pour les appeuré de protection de vérification du format de l'image en surplus !:

$uploadedfile = getimagesize($_FILES['avatar']['tmp_name']);

//--- Iexplorer
$extensions_MIMEautoriseesIE = array('image/pjpg', 'image/pjpeg', 'image/jpg');

//--- Mozilla
$extensions_MIMEautoriseesMF = array('image/jpg', 'image/jpeg', 'image/jpg');

if
(in_array($uploadedfile ['mime'], $extensions_MIMEautoriseesMF)
|| in_array($uploadedfile ['mime'], $extensions_MIMEautoriseesMF))
{
echo "Mime |".$infosImageSize['mime']."| Autorisé
";
//--- et blha blah blah... le reste du code dans le if
}
Qtronik Messages postés 16 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 8 mars 2011
24 janv. 2011 à 21:39
Bonjour,

C'est un bien bel example mais,
Il y a une deuxieme technique de vérification de l'image... Le Meta de l'image... Vite comme cela j'ai pas mon "snipet" à porté de main pour tester le meta de l'image (depuis mon cellulaire) Mais bon il est toujours préférable d'utiliser le plus de tests possible sur l'upload d'une image... (pjpeg/jpeg) Fournis par Iexplorer par example.

Merci de la simplicité de ton code. Les nom de tes functions explique bien l'absence de commentaires, mais pour les débutant ce n'est pas évident !

Bonne journée!
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
24 janv. 2011 à 10:17
Salut,

ta manière d'obtenir l'extension de l'image ouvre la porte à des failles de sécurité.
Personnellement j'utilise ceci:

$extension= $_FILES['fichier']['type'];
$boo= explode("/",$extension); // l'extension se trouve dans boo[1]

Tu n'as plus qu'à tester si c'est du gif, du png, ce que tu veux...

A part ça, le reste à l'air nickel, mise à part le nom que tu devrais tester pour eviter là aussi les failles.

J'espère que ça pourra t'aider.
cs_fenoril Messages postés 23 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 12 juin 2011
23 janv. 2011 à 14:41
Deuxième salve...

J'ai testé avec un fichier nommé "test.php" sur mon xampp dans le dossier "zerOzerO" (ligne à changer au cas où dans la fonction formulaire), avec le code joint à la fin.

Voici quelques remarques qui font que je n'étudierais pas plus ce code avant ta réaction :

1. getExtension sort d'où ? j'ai bien trouvé des sources créant cette fonction mais pas php de base.
2. Erreur ligne 38 : pas de crochet pour spécifier la zone couverte par le else.
3. $uploadedfile : pourquoi le redéfinir plusieurs fois ?
4. Je ne comprend pas la gestion des dimensions du fichier original (pourquoi faire h=h*60/w ?), et je crois que ça les change sans raison, mais sans être sûre (j'ai pas vérifié ces fonctions).
5. Il manque des gestions d'erreur puisque ce code ne plante pas, m'affiche "succès" mais j'ai pas de fichier... Là j'ai bien cherché.
6. La premières remarques restent valident.

Pour info je suis en php 5.3

Voici le code que j'ai utilisé :
define ("MAX_SIZE", "400");

if (isset($_REQUEST['upload'])) {
addimage();
} else {
formulaire();
}

function formulaire(){
?>
<form method="POST" action="http://localhost/zerOzerO/test.php?upload=1">

</form>

<?php
}
function addimage(){
$errors =0;
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$image = $_FILES["file"]["name"];
$uploadedfile = $_FILES['file']['tmp_name'];

if ($image) {
$filename = stripslashes($_FILES['file']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) {
echo 'verifier l\'extension de votre image!!';
$errors = 1;
} else {
$size = filesize($_FILES['file']['tmp_name']);
if ($size > MAX_SIZE*1024)
{
echo "verifier la taille de votre image!!";
$errors=1;
}

if($extension=="jpg" || $extension=="jpeg" )
{
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$src = imagecreatefrompng($uploadedfile);
}
else {
$src = imagecreatefromgif($uploadedfile);
}

list($width,$height) = getimagesize($uploadedfile);

$newwidth = 60;
$newheight = ($height/$width)*$newwidth;
$tmp = imagecreatetruecolor($newwidth,$newheight);

$newwidth1 = 25;
$newheight1 = ($height/$width)*$newwidth1;
$tmp1 = imagecreatetruecolor($newwidth1,$newheight1);

imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newwidth1, $newheight1, $width, $height);

$filename = $_FILES['file']['name'];
$filename1 = "small". $_FILES['file']['name'];

imagejpeg($tmp,$filename,100);
imagejpeg($tmp1,$filename1,100);

imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
}
}
}

// Afficher message de retour
if(!$errors)
echo "Succès!";
else echo "Erreur!!!";
}
deoxis9000 Messages postés 3 Date d'inscription dimanche 17 août 2008 Statut Membre Dernière intervention 23 janvier 2011
23 janv. 2011 à 10:44
salut
ton code manque quand même un peu de commentaire
encore un truc
c'est pas trés sécurisé car je peux mettre un fichier autre que les fichiers images
je renomme le ficher .jpg et puis c'est un fichier javascript donc la sécurité n'y est pas.
merci à toi
cs_fenoril Messages postés 23 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 12 juin 2011
22 janv. 2011 à 16:58
Salut !

Bon, avant test vu tout ce qui manque pour le mettre en place, quelques remarques dans un but constructif :
Il manque les commentaires (on est là pour apprendre...).
Une faute : Ligne 16, il manque l'échappement du '. (sinon succès s'écrit avec un accent grave au passage ;P)
Pour réellement tester, il manque quand même un formulaire d'envoi.
Parallèlement, il faudrait noter que sans une sécurisation minimum (Par exemple tester les caractères de hack dans le nom), ce script doit être conservé uniquement pour une zone sûre du site.

Par opposition, un bel effort d'indentation rend cette page carrément lisible ça fait plaisir.

Merci à toi et bon courage.
Rejoignez-nous