Qtronik
Messages postés16Date d'inscriptionsamedi 20 novembre 2010StatutMembreDerniè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és23Date d'inscriptionvendredi 28 mars 2008StatutMembreDernière intervention12 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és23Date d'inscriptionvendredi 28 mars 2008StatutMembreDernière intervention12 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és16Date d'inscriptionsamedi 20 novembre 2010StatutMembreDerniè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és2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 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és16Date d'inscriptionsamedi 20 novembre 2010StatutMembreDerniè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 !
Vonscott
Messages postés61Date d'inscriptionvendredi 6 janvier 2006StatutMembreDernière intervention19 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és16Date d'inscriptionsamedi 20 novembre 2010StatutMembreDerniè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és23Date d'inscriptionvendredi 28 mars 2008StatutMembreDernière intervention12 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és16Date d'inscriptionsamedi 20 novembre 2010StatutMembreDerniè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 !:
//--- 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és16Date d'inscriptionsamedi 20 novembre 2010StatutMembreDerniè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és166Date d'inscriptionmercredi 27 juin 2007StatutMembreDernière intervention31 mars 20141 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és23Date d'inscriptionvendredi 28 mars 2008StatutMembreDernière intervention12 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();
}
deoxis9000
Messages postés3Date d'inscriptiondimanche 17 août 2008StatutMembreDernière intervention23 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és23Date d'inscriptionvendredi 28 mars 2008StatutMembreDernière intervention12 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.
1 nov. 2014 à 14:32
5 févr. 2011 à 18:16
@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
5 févr. 2011 à 18:03
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 !
27 janv. 2011 à 22:22
@ 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.
26 janv. 2011 à 16:39
26 janv. 2011 à 12:32
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é...
26 janv. 2011 à 03:48
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...
25 janv. 2011 à 20:20
Aucun intérét. "Niveau initié" mdr
25 janv. 2011 à 16:12
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)
25 janv. 2011 à 15:27
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.
25 janv. 2011 à 02:53
$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
}
24 janv. 2011 à 21:39
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!
24 janv. 2011 à 10:17
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.
23 janv. 2011 à 14:41
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!!!";
}
23 janv. 2011 à 10:44
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
22 janv. 2011 à 16:58
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.