Proteger un fomulaire d'upload d'image? - PHP - Programmation
Marsh Posté le 04-06-2008 à 09:56:55
tu met une condition sur le $uploadedfile_name
if (strpos('.gif' , $uploadedfile_name) || strpos ('.jpg' , $uploadedfile_name) {
// le deroulement de ta fonction
}
sinon tu peut toujours passer par un test sur le type mime
Marsh Posté le 04-06-2008 à 09:59:21
le type mime sera mieux, autrement on prend un mp3, on la renomme en jpg et on contourne le système ...
dans ton traitement de formilaure, mets un print_r($_FILES) : tu verras qu'il t'apprendra plein de choses sur le fichier téléchargé, notamment son type mime.
Marsh Posté le 04-06-2008 à 10:07:03
merci pour vos reponses,
j'ai bien compris,je pense oui que verifie le type mine est le mieux, mais comment faire ensuite pour restreinte pour un jpg ou gif ?
désolé je suis novice en php,
peut tu m'ecrire le code qu'il faudrait rajouter et à quel endroit , s'il te plait?
Marsh Posté le 04-06-2008 à 10:38:44
pour verifier si tu as une image
http://fr.php.net/manual/fr/functi [...] getype.php
Marsh Posté le 04-06-2008 à 11:33:59
ionik a écrit : tu met une condition sur le $uploadedfile_name
|
Non, ce test n'est pas sur du tout, car un fichier dont le nom est
Code :
|
passe ce test.
Citation : merci, mais comment et ou integrer tout çà sur mon code? |
Code :
|
Marsh Posté le 04-06-2008 à 12:25:34
merci pour cette reponse,
j'ai essayé mais çà ne fonctionne pas, j'ai du mal inseré le code au bon endroit, pourrais tu me dire ou exactement faut il l'inseré?
merci bcp pour ton aide
Marsh Posté le 04-06-2008 à 12:53:20
lucas => pourquoi != ?
exif_imagetype est censé renvoyer 1 ou 2, justement, pour ces 2 types ... à moins que je n'aie mal compris la doc. (je présume que tu voulais inverser l'action ?)
Marsh Posté le 04-06-2008 à 14:22:57
oups, oui j'ai inversé l'action mea culpa.
J'edite mon post.
Je me suis aussi permis de tout passer en simples quotes sauf la requete.
Code complet (pas testé, sans doute pas mal d'erreurs à corriger)
Code :
|
Marsh Posté le 04-06-2008 à 14:25:11
getimagesize marche pas trop mal non plus pour vérifier qu'il s'agit bien d'une image (mais pas sûr que ce soit fiable à 100%)
Marsh Posté le 04-06-2008 à 19:32:36
çà a l'air de fonctionner merci beaucoup , est ce que q'avec ce code y aurait encore des possibilité de contourner ce code?
Marsh Posté le 05-06-2008 à 20:25:57
tu rajoutes le test getimagesize() si tu veux mais à priori pas de soucis.
Marsh Posté le 06-06-2008 à 09:32:41
bonjour,
je suis encore la et dépité , car malgré la correction du code ci dessous, les hackers arrivent encore a me déposer
un fichier .php à partir du formulaire .
pourtant lorsque je fais un essai moi tout ce passe bien et seul les fichiers jpg ou gif son acceptés,?
si quelqu un pourrait m'aider à palier à ce probleme et me corriger le code ci dessous ( car tres novice en php )
merci bcp d'avance pour votre soutien
Marsh Posté le 06-06-2008 à 17:50:45
Oui, mais est-ce que l'extension est .php ? si ce n'est pas le cas, il n'y a pas trop de risque (sauf si php est mal configuré)
utilise getimagesize().
Code :
Code :
|
Marsh Posté le 04-06-2008 à 09:31:23
bonjour,
voila mon probleme;
je suis novice en programation PHP,
j'ai recupéré un script d'agenda sur internet que j'ai bien installé, mais je subissais des attaques de hackers, et je me suis apercu qu'en fait il passait par ce script d'agenda par le formulaire d'upload d'image , ou l'on peut envoyer toute sorte de fichier.
Donc je voudrais tout simplement restreindre le format de fichier d'envoi à un "jpg ou gif"
Je vous joint ci dessous donc le script d'upload et le formulaire html,
si quelqu'un pouvait m'aider en me completant ce code pour palier à ce probleme
merci d'avance pour votre aide...
Formulaire d'envoi
---------------------------------------------------------------------------------------------
<td width="75%" height="29" valign="top"> <br>
<input type="image" border="0" name="imageField222" src="../images/carret0.gif" width="18" height="18" onClick="OnSubmit('upload')">
Upload image<br>
<br>
<input type="image" border="0" name="imageField2222" src="../images/logodel2.gif" width="15" height="15" onClick="OnSubmit('removeimage')">
Remove image </td>
------------------------------------------------------------------------------------------------
scipt d'upload
------------------------------------------------------------------------------------------
<?
function upload_image($idevent , $uploadedfile , $uploadedfile_name)
{
// upload an image for the event
global $CFG;
debug("image upload : $uploadedfile_name" );
$uploadedfilename = "";
if(isset($uploadedfile) && $uploadedfile<>"none" && $uploadedfile_name != "" )
{
$path = basename($uploadedfile_name); // does not use pathinfo function for compatibility with PHP3
$pathex = explode("." , $path);
$uploadedfilename = generate_filename("../".$CFG->image_event_dir , $pathex[1]);
if($uploadedfilename["filename"] <> "" )
{
debug("uploadedfilename = ".$uploadedfilename["path"]);
if(!copy($uploadedfile,$uploadedfilename["path"]))//"$CFG->image_event_dir/".$uploadedfilename))
{
echo("Sorry, Your file failed to upload.<br>" );
echo("Either your file doesn't exist or it was too large." );
return "";
}
else
db_query("UPDATE $CFG->table_event SET image = '$uploadedfilename[filename]' WHERE id=$idevent" );
}
else
echo("Sorry, Your file failed to upload.(filename generation failed)<br>" );
}
return $uploadedfilename;
}
?>
---------------------------------------------------------------------------------------------------------------