UPLOAD + AFFICHAGE ET SUPPRESSION DU CONTENU D'UN DOSSIER (IMAGES)
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011
-
22 mars 2009 à 14:39
zstof84
Messages postés1Date d'inscriptionlundi 22 février 2010StatutMembreDernière intervention20 février 2012
-
20 févr. 2012 à 06:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
zstof84
Messages postés1Date d'inscriptionlundi 22 février 2010StatutMembreDernière intervention20 février 2012 20 févr. 2012 à 06:16
bonjour merci pour le scritp mais j'aurai aimé pouvoir afficher les miniatures sur plusieurs pages mais je ne sais vraiment pas comment faire si quelqu'un pourrait m'aider merci
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 15 janv. 2010 à 09:40
"mieux" ?
quelle flemme ^^
DAM74
Messages postés10Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention15 janvier 2010 15 janv. 2010 à 00:22
le fichier zip permet de mieux tester le scrip sans le copier coller de la source ..............
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 14 janv. 2010 à 10:13
je ne te comprends pas, DAM74.
pourquoi demander ainsi des zips a tout va... ?
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 13 janv. 2010 à 20:29
Oui... oui... mais, ... Non...
pour tester, il suffit de faire un copier/coller du script dans une page php et de le transférer sur un serveur (ou en local si l'on a easyphp ou wamp ou autre)
Avec un script aussi court, je ne vois pas l'intérêt de se prendre la tête à faire un zip...
DAM74
Messages postés10Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention15 janvier 2010 13 janv. 2010 à 16:18
pour test le script ceci est plus facile avec un fichier zip
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 13 janv. 2010 à 15:45
Et pourquoi yveutunzip le coco?
DAM74
Messages postés10Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention15 janvier 2010 13 janv. 2010 à 15:32
Merci de mettre un fichier zip pour le code
houssam88
Messages postés3Date d'inscriptionjeudi 30 avril 2009StatutMembreDernière intervention 2 mai 2009 2 mai 2009 à 12:24
salut a tous
je me permet de vous poser une petite question pas tré loin de votre sujet :
bon voila je rencontre un petit problème dans l'upload des images, pas tou a fait concernant l'upload (celui ci marche bien) mai j'aimerai bien pouvoir afficher l'image uploadé dans une zone reservé a celle ci juste apré que l'utilisateur selectionne son image chosi
j'esper que quelqu'un me comprend
Voici ma page php:
<?php
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
if ($_FILES['monfichier']['size'] <= 1000000)
{
$infosfichier = pathinfo($_FILES['monfichier']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload, $extensions_autorisees))
{
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . basename($_FILES['monfichier']['name']));
echo "L'envoi a bien été effectué !";
}
}
}
?>
<form method="post" enctype="multipart/form-data" >
Joindre votre photo :
</form>
besoin de votre aide
cs_candyraton
Messages postés109Date d'inscriptiondimanche 27 juillet 2008StatutMembreDernière intervention 2 février 20123 6 avril 2009 à 22:36
Merci masternico
rat sucré? j'ignorais! (c tjrs mieux que sel et rat!)
"qu'en dira t'on" c'est mon coté anticonformiste;(sinon c'est candy ou raton; 2 p- qui s'oposent);(mais c tjrs candy qui ecrit!)so bad...
mondherclubiste
Messages postés10Date d'inscriptionvendredi 20 mars 2009StatutMembreDernière intervention 6 avril 2009 6 avril 2009 à 14:24
Salut tout le monde,
Désolé pour le retard , j'ai corrigé l'erreur.
Merci Masternico pour tes interventions et tes conseils sur ce post et bonne continuation
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 6 avril 2009 à 13:41
lit le commentaire de hajbioblio (5ème post). L'erreur reportée n'a pas été corrigée. Le numéro de ligne a changé mais c'est toujours la même erreur.
Ce qui serait intéressant, c'est que ce soit l'auteur qui réponde aux questions...
Fenri
Messages postés5Date d'inscriptionjeudi 2 avril 2009StatutMembreDernière intervention17 novembre 2009 6 avril 2009 à 13:14
Je commence à me decourager ! J'ai testé plein de codes et aucun ne marche ...
Je viens de tester celui là et il ne marche pas il me dis (Wampserveur) :"Parse error: parse error, expecting `','' or `';'' in C:\wamp\www\Exchange\parcourir.php on line 43". Quelqun pourrait peut etre le débuguer entieremnt ou me fournir un lien vers un autre code où il n'y a pas d'erreurs ! Merci d'avance.
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 6 avril 2009 à 09:22
Salut candyranton
(marrant ton pseudo, outre le jeu de mot, cela fait aussi un mélange spanglish dont la traduction est 'le rat sucré' ;)
Le filtre des extensions est faillible car le champs 'type' de la variable FILES est renseigné par le navigateur. Il n'est en rien vérifié par PHP quand le fichier arrive sur le serveur. Ce qui fait qu'avec un peut de connaissance, il facile de faire croire au script que nous lui envoyons un simple fichier jpeg alors que c'est un script PHP ou du javascript. Une fois le fichier sur le serveur, on peut y faire appels depuis l'extérieur et ainsi exécuter des commandes (afficher le contenu de certains fichiers PHP par exemple, pour y trouver les mots de passe de connexion MySQL) avec la limitation que le script n'a pas les droit root, donc ce n'est pas tout à fait un rootkit. J'appellerais ça plutôt un 'userkit'.
Il faut utiliser les fonctions 'mimes' de PHP pour détecter quel est le vrais type mimes du fichier. Le problème, c'est que cette extention n'est pas toujours disponible.
Voici un petit exemple (récupéré sur un site en recherchant avec google):
$mtype = '';
Ensuite, on compare le mimes donné par le navigateur avec celui retrouvé manuellement. Si il n'y a pas de correspondance: c'est une tentative d'attaque.
===================//=====================
L'auteur a argumenté que ce script fait partie d'une console réservé à l'administrateur et que donc dans sa version finale il comporte tout un lot de contrôles d'accès.
De ce fait, dans l'état actuel, ce script n'est en rien sécurisé. Donc je ne peut pas dire ce qu'il en est des failles de sécurités d'un script qui ne protège rien...
par contre, dans le petit bout de code servant à déterminer si qqu'un essaye de jouer avec les paramètres, le script ne s'arrête pas pour autant en cas de tentative:
if(isset($_GET['delete']))
if(strpos($_GET['delete'],'/')===false) // <== il faudrait sortir de script en cas de présence
if(file_exists($dir.'/'.$_GET['delete']))
unlink($dir.'/'.$_GET['delete']);
cs_candyraton
Messages postés109Date d'inscriptiondimanche 27 juillet 2008StatutMembreDernière intervention 2 février 20123 5 avril 2009 à 20:03
Bonjour,
ton script à attirer mon attention car j'ai fait pareille pour une galerie;(j'ai finalement du gerer des erreurs de tailles (car je crée des miniatures deriere(2048px maxi)aprés telechargement et le poids (500ko chez free) (sources dispos si ça vous interesse)).
(perso j'ai choisi de m'envoyer un mail à chq erreures)
j'aurais 2 questions (ainsi qu'à masternico):
-Comment peuvent-ils franchir le filtre des extensions pour hacker?
-Quels sont les failles de sécurité de ce code?
Merci pour votre contribution
hajbioblio
Messages postés1Date d'inscriptionsamedi 5 avril 2008StatutMembreDernière intervention23 mars 2009 23 mars 2009 à 10:36
1- Erreur à la lign 41 : onclick="supp_im(\''.$lien[1].'\'')
-> correction : onclick="supp_im(\''.$lien[1].'\')
2- il faut préciser que le fichier dans lequel on doit coller le code doit être nommé "parcourir.php"
3- pour que le script marche, il faut créer un dossier nommé "images" à côté du fichier "parcourir.php"
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 23 mars 2009 à 09:24
Au fait,
Il y a un truc aussi à la ligne 43:
<img src="'.$dir."/".$lien[1].'"
Il faut entourer le lien avec rawurlencode pour assainir les noms avec certains caractères spéciaux (accents et autres)
<img src="'.$dir."/".rawurlencode($lien[1]).'"
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 23 mars 2009 à 00:57
C'est mieux oui.
Par contre, je pense que puisque c'est ton script qui créer le lien d'appel, on peut considérer que le lien DOIT être correcte sinon, ça signifie que qqu'un s'ammuse avec les paramètres.
Donc j'irais plus loin dans la parano et je ferais en sorte de logger l'erreur ainsi que la variable $_SERVER dans un fichier et/ou BDD de manière à pouvoir repérer si qqu'un a essayé de jouer manuellement avec les paramètres.
C'est un bon moyen de detecter les attaques et les contrer.
mondherclubiste
Messages postés10Date d'inscriptionvendredi 20 mars 2009StatutMembreDernière intervention 6 avril 2009 22 mars 2009 à 23:42
Salut,
D'abord merci masternico pour vos conseils et vos remarques.
Pour la 1 remarque j'ai modifié la ligne afin d'être plus lisible .
Pour la 2 remarque, certes ce script possède quelques lacunes de sécurité, mais il faut pas oublié qu'un tel script est destiné au administrateurs des sites, donc il ne va être exécuté qu'après des vérifications des paramétrés de connexion (ex:les sessions,...), mais quand même, j'ai suivi ton conseil et j'ai ajouté ce test : if(strpos($_GET['delete'],'/')===false)
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 22 mars 2009 à 14:39
Salut,
en soit, le script est correct. L'indentation est propre. Il n'y a pas de commentaires, mais le code est suffisemment simple pour ne pas avoir à le faire.
Par contre, il y a deux points sur lesquels je serais assez vache:
1) Dans la ligne suivante:
42. echo'<td style="border:solid thin '.$couleur.'" align="center">['.$dir.
]</td>';
Tu mélanges alégrement les apostrophes et guillemets... Fait un choix. Soit tout en guillemet, soit tout en apostrophe car la relecture est difficile.
2)A ton avis, que se passe t-il si je mets dans la barre d'adresse ceci? :
Je te laisse imaginer ce que je pourrais faire comme dégats sur ton site juste en faissant de simples requettes HTML.
Il te faut sécuriser tes inputs car contrairement à ce que l'on dit, internet n'a rien du 'tout le monde il est beau tout le monde il est gentil'.
C'est un monde sans pitié où nombre de loups attendent dans l'ombre qu'une brebis égarée baisse sa garde. Et là, il lui saute à la gorge.
Cette petite image pour dire que si tu sorts un script avec aussi peut de controle, j'ai peur pour ce qui est du reste de ton site.
Si un loup te tombe dessus, tu n'aura plus que tes yeux pour pleurer car ce qui les interesse, c'est pas le contenu de ton site mais plutôt d'utiliser les ressources de ton sites à d'autres fins (spam, hacking, brute force attack...)
Je ne note pas car ce script ne fait pas avancer le smilblick
20 févr. 2012 à 06:16
15 janv. 2010 à 09:40
quelle flemme ^^
15 janv. 2010 à 00:22
14 janv. 2010 à 10:13
pourquoi demander ainsi des zips a tout va... ?
13 janv. 2010 à 20:29
pour tester, il suffit de faire un copier/coller du script dans une page php et de le transférer sur un serveur (ou en local si l'on a easyphp ou wamp ou autre)
Avec un script aussi court, je ne vois pas l'intérêt de se prendre la tête à faire un zip...
13 janv. 2010 à 16:18
13 janv. 2010 à 15:45
13 janv. 2010 à 15:32
2 mai 2009 à 12:24
je me permet de vous poser une petite question pas tré loin de votre sujet :
bon voila je rencontre un petit problème dans l'upload des images, pas tou a fait concernant l'upload (celui ci marche bien) mai j'aimerai bien pouvoir afficher l'image uploadé dans une zone reservé a celle ci juste apré que l'utilisateur selectionne son image chosi
j'esper que quelqu'un me comprend
Voici ma page php:
<?php
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
if ($_FILES['monfichier']['size'] <= 1000000)
{
$infosfichier = pathinfo($_FILES['monfichier']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload, $extensions_autorisees))
{
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . basename($_FILES['monfichier']['name']));
echo "L'envoi a bien été effectué !";
}
}
}
?>
<form method="post" enctype="multipart/form-data" >
Joindre votre photo :
</form>
besoin de votre aide
6 avril 2009 à 22:36
rat sucré? j'ignorais! (c tjrs mieux que sel et rat!)
"qu'en dira t'on" c'est mon coté anticonformiste;(sinon c'est candy ou raton; 2 p- qui s'oposent);(mais c tjrs candy qui ecrit!)so bad...
En cherchant un peu (comment il pourrait executer un jpg par exemple) j'ai bien compris à quel point je suis loin du compte:
"agent de sécurité" est un metier à part entiére!
demonstration: http://www.developpez.net/forums/d198653-4/php/langage/contribuez/securite-failles-plus-courantes/
Merci encore pour ta réponse
6 avril 2009 à 14:24
Désolé pour le retard , j'ai corrigé l'erreur.
Merci Masternico pour tes interventions et tes conseils sur ce post et bonne continuation
6 avril 2009 à 13:41
Ce qui serait intéressant, c'est que ce soit l'auteur qui réponde aux questions...
6 avril 2009 à 13:14
Je viens de tester celui là et il ne marche pas il me dis (Wampserveur) :"Parse error: parse error, expecting `','' or `';'' in C:\wamp\www\Exchange\parcourir.php on line 43". Quelqun pourrait peut etre le débuguer entieremnt ou me fournir un lien vers un autre code où il n'y a pas d'erreurs ! Merci d'avance.
6 avril 2009 à 09:22
(marrant ton pseudo, outre le jeu de mot, cela fait aussi un mélange spanglish dont la traduction est 'le rat sucré' ;)
Le filtre des extensions est faillible car le champs 'type' de la variable FILES est renseigné par le navigateur. Il n'est en rien vérifié par PHP quand le fichier arrive sur le serveur. Ce qui fait qu'avec un peut de connaissance, il facile de faire croire au script que nous lui envoyons un simple fichier jpeg alors que c'est un script PHP ou du javascript. Une fois le fichier sur le serveur, on peut y faire appels depuis l'extérieur et ainsi exécuter des commandes (afficher le contenu de certains fichiers PHP par exemple, pour y trouver les mots de passe de connexion MySQL) avec la limitation que le script n'a pas les droit root, donc ce n'est pas tout à fait un rootkit. J'appellerais ça plutôt un 'userkit'.
Il faut utiliser les fonctions 'mimes' de PHP pour détecter quel est le vrais type mimes du fichier. Le problème, c'est que cette extention n'est pas toujours disponible.
Voici un petit exemple (récupéré sur un site en recherchant avec google):
$mtype = '';
// magic_mime module installed?
if (function_exists('mime_content_type')) {
$mtype = mime_content_type($file_path);
}
// fileinfo module installed?
else if (function_exists('finfo_file')) {
$finfo = finfo_open(FILEINFO_MIME); // return mime type
$mtype = finfo_file($finfo, $file_path);
finfo_close($finfo);
}
Ensuite, on compare le mimes donné par le navigateur avec celui retrouvé manuellement. Si il n'y a pas de correspondance: c'est une tentative d'attaque.
===================//=====================
L'auteur a argumenté que ce script fait partie d'une console réservé à l'administrateur et que donc dans sa version finale il comporte tout un lot de contrôles d'accès.
De ce fait, dans l'état actuel, ce script n'est en rien sécurisé. Donc je ne peut pas dire ce qu'il en est des failles de sécurités d'un script qui ne protège rien...
par contre, dans le petit bout de code servant à déterminer si qqu'un essaye de jouer avec les paramètres, le script ne s'arrête pas pour autant en cas de tentative:
if(isset($_GET['delete']))
if(strpos($_GET['delete'],'/')===false) // <== il faudrait sortir de script en cas de présence
if(file_exists($dir.'/'.$_GET['delete']))
unlink($dir.'/'.$_GET['delete']);
5 avril 2009 à 20:03
ton script à attirer mon attention car j'ai fait pareille pour une galerie;(j'ai finalement du gerer des erreurs de tailles (car je crée des miniatures deriere(2048px maxi)aprés telechargement et le poids (500ko chez free) (sources dispos si ça vous interesse)).
(perso j'ai choisi de m'envoyer un mail à chq erreures)
j'aurais 2 questions (ainsi qu'à masternico):
-Comment peuvent-ils franchir le filtre des extensions pour hacker?
-Quels sont les failles de sécurité de ce code?
Merci pour votre contribution
23 mars 2009 à 10:36
-> correction : onclick="supp_im(\''.$lien[1].'\')
2- il faut préciser que le fichier dans lequel on doit coller le code doit être nommé "parcourir.php"
3- pour que le script marche, il faut créer un dossier nommé "images" à côté du fichier "parcourir.php"
23 mars 2009 à 09:24
Il y a un truc aussi à la ligne 43:
<img src="'.$dir."/".$lien[1].'"
Il faut entourer le lien avec rawurlencode pour assainir les noms avec certains caractères spéciaux (accents et autres)
<img src="'.$dir."/".rawurlencode($lien[1]).'"
23 mars 2009 à 00:57
Par contre, je pense que puisque c'est ton script qui créer le lien d'appel, on peut considérer que le lien DOIT être correcte sinon, ça signifie que qqu'un s'ammuse avec les paramètres.
Donc j'irais plus loin dans la parano et je ferais en sorte de logger l'erreur ainsi que la variable $_SERVER dans un fichier et/ou BDD de manière à pouvoir repérer si qqu'un a essayé de jouer manuellement avec les paramètres.
C'est un bon moyen de detecter les attaques et les contrer.
22 mars 2009 à 23:42
D'abord merci masternico pour vos conseils et vos remarques.
Pour la 1 remarque j'ai modifié la ligne afin d'être plus lisible .
Pour la 2 remarque, certes ce script possède quelques lacunes de sécurité, mais il faut pas oublié qu'un tel script est destiné au administrateurs des sites, donc il ne va être exécuté qu'après des vérifications des paramétrés de connexion (ex:les sessions,...), mais quand même, j'ai suivi ton conseil et j'ai ajouté ce test : if(strpos($_GET['delete'],'/')===false)
22 mars 2009 à 14:39
en soit, le script est correct. L'indentation est propre. Il n'y a pas de commentaires, mais le code est suffisemment simple pour ne pas avoir à le faire.
Par contre, il y a deux points sur lesquels je serais assez vache:
1) Dans la ligne suivante:
42. echo'<td style="border:solid thin '.$couleur.'" align="center">['.$dir.
]</td>';
Tu mélanges alégrement les apostrophes et guillemets... Fait un choix. Soit tout en guillemet, soit tout en apostrophe car la relecture est difficile.
2)A ton avis, que se passe t-il si je mets dans la barre d'adresse ceci? :
http://www.tonsite.fr/parcourir.php?aff&delete=supprimer.png ou bien pire encore : http://www.tonsite.fr/parcourir.php?aff&delete=../index.php
Je te laisse imaginer ce que je pourrais faire comme dégats sur ton site juste en faissant de simples requettes HTML.
Il te faut sécuriser tes inputs car contrairement à ce que l'on dit, internet n'a rien du 'tout le monde il est beau tout le monde il est gentil'.
C'est un monde sans pitié où nombre de loups attendent dans l'ombre qu'une brebis égarée baisse sa garde. Et là, il lui saute à la gorge.
Cette petite image pour dire que si tu sorts un script avec aussi peut de controle, j'ai peur pour ce qui est du reste de ton site.
Si un loup te tombe dessus, tu n'aura plus que tes yeux pour pleurer car ce qui les interesse, c'est pas le contenu de ton site mais plutôt d'utiliser les ressources de ton sites à d'autres fins (spam, hacking, brute force attack...)
Je ne note pas car ce script ne fait pas avancer le smilblick