WrestlingMan
Messages postés78Date d'inscriptionmardi 16 juin 2009StatutMembreDernière intervention17 février 2011
-
31 août 2010 à 15:02
WrestlingMan
Messages postés78Date d'inscriptionmardi 16 juin 2009StatutMembreDernière intervention17 février 2011
-
2 sept. 2010 à 19:02
Bonjour à tous !
Je vous écris pour un problème que je dois résoudre dans les plus bref délais, j'espère que vous pourrez m'aider !
J'ai créé un formulaire afin d'uploader un fichier ! Or, mon script plante systématique au moment ou j'upload le fichier :
if(move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier))
{
echo("L'upload a réussi !
Je pense que c'est dû au fait que sur le serveur en ligne ou est mon site, ne m'autorise pas l'accès au dossier upload ! Pourquoi je ne sais pas !!
<?php
require("../connect.php");
// Récupération du dossier dans lequel le fichier sera uploadé
$DESTINATION_FOLDER = "upload/";
// Taille maximale de fichier, valeur en bytes
$MAX_SIZE = 5000000;
// Récupération de l'url de retour
$RETURN_LINK = $_SERVER['HTTP_REFERER'];
// Définition des extensions de fichier autorisées (avec le ".")
$AUTH_EXT = array(".doc", ".pdf", ".jpg", ".ppt", ".xls", ".bmp", ".gif", ".docx", ".ods", ".odt");
// Fonction permettant de créer un lien de retour automatique
function createReturnLink()
{
global $RETURN_LINK;
echo "Retour
";
}
// Fonction permettant de vérifier si l'extension du fichier est autorisée.
function isExtAuthorized($ext)
{
global $AUTH_EXT;
if(in_array($ext, $AUTH_EXT))
{
return true;
}
else
{
return false;
}
}
// On vérifie que le champs contenant le chemin du fichier soit bien rempli.
if(empty($_FILES["f_document"]["name"]))
{
// Nom du fichier choisi:
$nomFichier = $_FILES["f_document"]["name"] ;
// Nom temporaire sur le serveur:
$nomTemporaire = $_FILES["f_document"]["tmp_name"] ;
// Type du fichier choisi:
$typeFichier = $_FILES["f_document"]["type"] ;
// Poids en octets du fichier choisit:
$poidsFichier = $_FILES["f_document"]["size"] ;
// Code de l'erreur si jamais il y en a une:
$codeErreur = $_FILES["f_document"]["error"] ;
// Extension du fichier
$extension = strrchr($nomFichier, ".");
// Si la taille du fichier est supérieure à la taille
// maximum spécifiée => message d'erreur
if($poidsFichier < $MAX_SIZE)
{
// On teste ensuite si le fichier a une extension autorisée
if (!in_array($extension,$AUTH_EXT))
{
// Ensuite, on copie le fichier uploadé ou bon nous semble.
if(move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier))
{
echo("L'upload a réussi !
");
//echo(createReturnLink());
}
}
else
{
echo ("Les fichiers avec cette extension $extension ne peuvent pas être uploadés !
");
//echo (createReturnLink()."
");
}
}
else
{
$tailleKo = $MAX_SIZE / 1000;
echo("Vous ne pouvez pas uploader de fichiers dont la taille est supérieure à : $tailleKo Ko.
");
//echo (createReturnLink()."
");
}
}
else
{
echo("Vous n'avez pas choisi de fichier !
");
//echo (createReturnLink()."
");
}
?>
Voici l'intégralité de mon code, j'espère que vous pourrez m'aider rapidement, car c'est assez urgent !! Merci d'avance !!
WrestlingMan
Messages postés78Date d'inscriptionmardi 16 juin 2009StatutMembreDernière intervention17 février 20111 2 sept. 2010 à 15:27
Après avoir pris le temps de tout reprendre à zéro je suis parvenue à réaliser un code d'upload correct qui fonctionne très bien !
Je vais donc vous en faire profiter !!
et me renvoi systématique l'echo que j'ai mis dans le else de cette condition (en rouge dans le sujet) !! C'est pour sa, je dois avouer que là je suis larguer et que j'ai besoin d'aide ! ^^
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 1 sept. 2010 à 10:39
Dans ces cas là, l'erreur 'vient de toi'.. puisqu'il n'y a pas de message d'erreur.. LOL !!
essaie la méthode bourrin serein..
move_uploaded_file($_FILES["f_document"]["tmp_name"],'/tmp/toto.txt'))
et tu mets ton /tmp en 777 pour être sur que tout le monde puisse écrire, a fortiori ton process Apache..
Autre piste: peut etre un SAFE_MODE capricieux en fonction des versions d'Apache.
S.
Vous n’avez pas trouvé la réponse que vous recherchez ?
WrestlingMan
Messages postés78Date d'inscriptionmardi 16 juin 2009StatutMembreDernière intervention17 février 20111 1 sept. 2010 à 11:01
Merci pur ta réponse mais je n'est bien saisie tout ce que tu as dit !!
Certe je viens d'avoir mon diplôme, mais ce dont tu me parle (tmp, 777) je ne vois pas du tout ce que c'est ! Ensuite, si j'ai bien compris, je doit mettre dans un fichier text un document que j'aurais uploader, c'est-à-dire des fichiers qui peuvent aussi bien être des .doc, .xls, .ppt ?? Peux-tu m'en dire d'avantage s'il te plaît ??
Merci en tout cas pour ton aide !! ^^
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 1 sept. 2010 à 12:51
Avant que ça marche en ligne ça doit déja marcher chez toi. Donc teste avec
move_uploaded_file($_FILES["f_document"]["tmp_name"],'C:\toto.txt'))
Et vérifie si tu as bien un fichier toto.txt dans ton C: après exécution de ton script..
Par contre opur la mise en prod il te faudra connaitre l'environnement.. ET le maitriser un minimum..
S.
Cela veut donc dire qu'il ne trouve pas le fichier que j'ai sélectionné !
Alors questions, dans mon code initial, dois-je appeler cette variable par la méthode post du fait que le input est dans un formulaire, ou est-ce que mon code est bon et c'est autre chose qui cloche ??
Pour plus de clarté, voici les messages d'erreurs que j'obtient :
Notice: Undefined index: f_document in C:\wamp\www\diane_gareodevoir\zone_administration\devoir_exec.php on line 38
Notice: Undefined index: f_document in C:\wamp\www\diane_gareodevoir\zone_administration\devoir_exec.php on line 40
Notice: Undefined index: f_document in C:\wamp\www\diane_gareodevoir\zone_administration\devoir_exec.php on line 42
Notice: Undefined index: f_document in C:\wamp\www\diane_gareodevoir\zone_administration\devoir_exec.php on line 44
Notice: Undefined index: f_document in C:\wamp\www\diane_gareodevoir\zone_administration\devoir_exec.php on line 46
Notice: Undefined index: f_document in C:\wamp\www\diane_gareodevoir\zone_administration\devoir_exec.php on line 59
L'upload a échoué !
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 1 sept. 2010 à 14:22
tu es sur d'avoir mis les bons arguments dans ta balise <form> ??
par acquis de concience fais un var_dump($_FILES); après ton POST. Ca permettra de savoir si tu récupères bien la variable..
S.
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 1 sept. 2010 à 14:29
Salut,
Afin de résoudre ton problème :
if(empty($_FILES["f_document"]["name"]))
doit être remplacé par :
if(!empty($_FILES["f_document"]["name"]))
Dans le même genre :
if (!in_array($extension,$AUTH_EXT))
doit être remplacé par :
if (in_array($extension,$AUTH_EXT))
Ce serait bête de n'autoriser l'upload que des extensions non autorisés hein ? :)
Au passage tu es en lice pour la palme de la fonction la plus useless grâce à tes fonctions isExtAuthorized() et createReturnLink() qui, en plus de ne servir à rien et posent un potentiel risque d'effets de bords, ne sont jamais appelée dans ton code.
J'en profite également pour dire qu'avec certaines versions du serveur web nginx le premier venu peut exécuter le script PHP de son choix. Je n'ai que passé un rapide coup d'œil mais ça me semble contenir bien d'autres failles de sécurité (en tout cas ce qui est certain est que, combiné à d'autres erreurs fréquentes dans le reste du code, ça peut en poser de très graves également).
WrestlingMan
Messages postés78Date d'inscriptionmardi 16 juin 2009StatutMembreDernière intervention17 février 20111 1 sept. 2010 à 14:39
D'accord merci pour l'info !
A titre informatif, j'ai adapter le code d'un script trouvé sur le net car le mien ne marchait pas à la base non plus ! Je crois que je vais reprendre depuis le début, en évitant les problèmes que tu as mis en avant et en essayant les astuces que ma donné l'autre intervenant, une fois la solution trouvé, je la mettrais sur ce sujet !! ^^
Merci pour les infos, je vous tiens au courant !! ^^
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 1 sept. 2010 à 14:45
j'avoue n'avoir même pas lu le code.. je suis parti du principe suivant: les fondamentaux sont ils bons ? NONNN.. donc ne lis pas plus et résous déja ça. LOLL !!
S.
WrestlingMan
Messages postés78Date d'inscriptionmardi 16 juin 2009StatutMembreDernière intervention17 février 20111 1 sept. 2010 à 15:08
En fait je crois avoir compris mon problème !
Je n'appel pas ma variable par la méthode post ! Je pense qu'il est là mon principal souci !! Il y a vraiment des fois, je ne suis pas attentif à ce que je fais !! Je vais vérifié et si c'est sa je mettrais réponse accepté !! ^^
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 2 sept. 2010 à 17:46
Salut,
je suis parvenue à réaliser un code d'upload correct qui fonctionne très bien !
Je ne voudrais pas faire mon rabat joie, mais "correct" est quelque peu exagéré !
J'ai lu en transversal, mais :
- le renvoi de JS n'est vraiment pas top
- tu as toujours des problèmes de sécurité important.
Il est possible d'uploader un fichier plus gros que la taille que tu fixes (sous réserve de la config PHP)
Il est peut être possible de réaliser une injection SQL, ou en tout cas d'obtenir des infos importantes sur ta requête en la faisant planter.
$nom md5(uniqid(rand(), true));> ne sert à rien puisque $nom est redéfinie après
WrestlingMan
Messages postés78Date d'inscriptionmardi 16 juin 2009StatutMembreDernière intervention17 février 20111 2 sept. 2010 à 19:02
Certe il n'est pas parfait, mais il fonctionne très bien, donc il est correct !! ^^
Merci pour l'info tout de même, quant à la sécurité, de quoi parles-tu exactement ??
Qu'est-ce qui pourrait être améliorer ?? N'hésite pas, je suis officielement diplomé d'informatique mais néanmoins je ne suis pas un hyper pro du php et j'ai toujours soif d'apprendre de nouvelles choses !! ^^