Voila que l'on me dit qu'il faut utiliser is_uploaded_file et
move_uploaded_file pour des raisons de sécurités que j'ignore.
Qu'elle sont elles ?
Parce que serieusement, a part s'arranger pour que le nouveau nom ne
soit pas executable (de quelque manière que cela soit), je ne voie pas
ce qu'il y a de dangereux, et je ne voie pas en quoi move_uploded_file
pourra m'aider.
Alors sauf si move_upload_file scan le fichier a la recherche de code
potentielement dangereux, rend inoffensif celui-ci, vire les chmod
executable et s'arrange pour mettre le fichier dans un repertoire non
accessible par le parseur php (ou autre)...
Le seul interet que je peux y voir c'est de vérifier que le fichier à
bien été uploader et non pas déposé de façon malicieuse dans /tmp par un
méchand utilisateur ayant les droits sur la machine et sachant qu'a ce
moment exact il falait un fichier temporaire dans /tmp...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
CrazyCat
Guillaume Bouchard wrote:
Les rares fois ou j'ai utilisé les fonctions de gestion de l'upload http de php, j'ai utilisé la fonction copy : Voila que l'on me dit qu'il faut utiliser is_uploaded_file et move_uploaded_file pour des raisons de sécurités que j'ignore.
Tout d'abord, comme tu le dis, ça permet de vérifier qu'il s'agit bien d'un fichier envoyé par post.
ensuite, il suffit de lire la doc:
move_uploaded_file() s'assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu'à destination.
Si filename n'est pas valide, rien ne se passe, et move_uploaded_file() retournera FALSE.
Si filename est un fichier téléchargé, mais que pour une raison quelconque, il ne peut être déplacé, rien ne se passe, et move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Ce type de vérification est spécialement important s'il est possible que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même aux utilisateurs du même système.
Note : move_uploaded_file() n'est pas affectée par les restrictions liées au safe mode et à l'open_basedir. Cependant, les restrictions sont placées uniquement sur le paramètre destination qui permet le déplacement des fichiers chargés dans lesquels filename peut entrer en conflit avec ces restrictions. move_uploaded_file() permet de s'assurer de la sécurité de cette opération en autorisant le déplacement des seuls fichiers chargés via PHP.
-- Astuces informatiques: http://www.crazycat.info Tchattez en liberté: http://www.crazy-irc.net
Guillaume Bouchard wrote:
Les rares fois ou j'ai utilisé les fonctions de gestion de l'upload http
de php, j'ai utilisé la fonction copy :
Voila que l'on me dit qu'il faut utiliser is_uploaded_file et
move_uploaded_file pour des raisons de sécurités que j'ignore.
Tout d'abord, comme tu le dis, ça permet de vérifier qu'il s'agit bien
d'un fichier envoyé par post.
ensuite, il suffit de lire la doc:
move_uploaded_file() s'assure que le fichier filename est un fichier
téléchargé par HTTP POST. Si le fichier est valide, il est déplacé
jusqu'à destination.
Si filename n'est pas valide, rien ne se passe, et move_uploaded_file()
retournera FALSE.
Si filename est un fichier téléchargé, mais que pour une raison
quelconque, il ne peut être déplacé, rien ne se passe, et
move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Ce type de vérification est spécialement important s'il est possible que
les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même
aux utilisateurs du même système.
Note : move_uploaded_file() n'est pas affectée par les restrictions
liées au safe mode et à l'open_basedir. Cependant, les restrictions sont
placées uniquement sur le paramètre destination qui permet le
déplacement des fichiers chargés dans lesquels filename peut entrer en
conflit avec ces restrictions. move_uploaded_file() permet de s'assurer
de la sécurité de cette opération en autorisant le déplacement des seuls
fichiers chargés via PHP.
--
Astuces informatiques: http://www.crazycat.info
Tchattez en liberté: http://www.crazy-irc.net
Les rares fois ou j'ai utilisé les fonctions de gestion de l'upload http de php, j'ai utilisé la fonction copy : Voila que l'on me dit qu'il faut utiliser is_uploaded_file et move_uploaded_file pour des raisons de sécurités que j'ignore.
Tout d'abord, comme tu le dis, ça permet de vérifier qu'il s'agit bien d'un fichier envoyé par post.
ensuite, il suffit de lire la doc:
move_uploaded_file() s'assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu'à destination.
Si filename n'est pas valide, rien ne se passe, et move_uploaded_file() retournera FALSE.
Si filename est un fichier téléchargé, mais que pour une raison quelconque, il ne peut être déplacé, rien ne se passe, et move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Ce type de vérification est spécialement important s'il est possible que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même aux utilisateurs du même système.
Note : move_uploaded_file() n'est pas affectée par les restrictions liées au safe mode et à l'open_basedir. Cependant, les restrictions sont placées uniquement sur le paramètre destination qui permet le déplacement des fichiers chargés dans lesquels filename peut entrer en conflit avec ces restrictions. move_uploaded_file() permet de s'assurer de la sécurité de cette opération en autorisant le déplacement des seuls fichiers chargés via PHP.
-- Astuces informatiques: http://www.crazycat.info Tchattez en liberté: http://www.crazy-irc.net
Guillaume Bouchard
CrazyCat wrote:
Tout d'abord, comme tu le dis, ça permet de vérifier qu'il s'agit bien d'un fichier envoyé par post.
Ok, alors je m'en fout :)
ensuite, il suffit de lire la doc:
Merci, c'étais déjà fait.
move_uploaded_file() s'assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu'à destination.
Ça j'avais compris
Si filename n'est pas valide, rien ne se passe, et move_uploaded_file() retournera FALSE.
Comme copy
Si filename est un fichier téléchargé, mais que pour une raison quelconque, il ne peut être déplacé, rien ne se passe, et move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Comme copy, A non, copy ne fera pas l'alerte alacon.
Ce type de vérification est spécialement important s'il est possible que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même aux utilisateurs du même système.
Rien pigé à cette phrase. Je ne voie pas ce que move_uploded_file change ici par rapport à copy.
Note : move_uploaded_file() n'est pas affectée par les restrictions liées au safe mode et à l'open_basedir. Cependant, les restrictions sont placées uniquement sur le paramètre destination qui permet le déplacement des fichiers chargés dans lesquels filename peut entrer en conflit avec ces restrictions. move_uploaded_file() permet de s'assurer de la sécurité de cette opération en autorisant le déplacement des seuls fichiers chargés via PHP.
ok.
Bref, Je cherche toujours la difference entre copy et move_machin.
-- Guillaume.
CrazyCat wrote:
Tout d'abord, comme tu le dis, ça permet de vérifier qu'il s'agit bien
d'un fichier envoyé par post.
Ok, alors je m'en fout :)
ensuite, il suffit de lire la doc:
Merci, c'étais déjà fait.
move_uploaded_file() s'assure que le fichier filename est un fichier
téléchargé par HTTP POST. Si le fichier est valide, il est déplacé
jusqu'à destination.
Ça j'avais compris
Si filename n'est pas valide, rien ne se passe, et move_uploaded_file()
retournera FALSE.
Comme copy
Si filename est un fichier téléchargé, mais que pour une raison
quelconque, il ne peut être déplacé, rien ne se passe, et
move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Comme copy, A non, copy ne fera pas l'alerte alacon.
Ce type de vérification est spécialement important s'il est possible que
les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même
aux utilisateurs du même système.
Rien pigé à cette phrase. Je ne voie pas ce que move_uploded_file change
ici par rapport à copy.
Note : move_uploaded_file() n'est pas affectée par les restrictions
liées au safe mode et à l'open_basedir. Cependant, les restrictions sont
placées uniquement sur le paramètre destination qui permet le
déplacement des fichiers chargés dans lesquels filename peut entrer en
conflit avec ces restrictions. move_uploaded_file() permet de s'assurer
de la sécurité de cette opération en autorisant le déplacement des seuls
fichiers chargés via PHP.
ok.
Bref, Je cherche toujours la difference entre copy et move_machin.
Tout d'abord, comme tu le dis, ça permet de vérifier qu'il s'agit bien d'un fichier envoyé par post.
Ok, alors je m'en fout :)
ensuite, il suffit de lire la doc:
Merci, c'étais déjà fait.
move_uploaded_file() s'assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu'à destination.
Ça j'avais compris
Si filename n'est pas valide, rien ne se passe, et move_uploaded_file() retournera FALSE.
Comme copy
Si filename est un fichier téléchargé, mais que pour une raison quelconque, il ne peut être déplacé, rien ne se passe, et move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Comme copy, A non, copy ne fera pas l'alerte alacon.
Ce type de vérification est spécialement important s'il est possible que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même aux utilisateurs du même système.
Rien pigé à cette phrase. Je ne voie pas ce que move_uploded_file change ici par rapport à copy.
Note : move_uploaded_file() n'est pas affectée par les restrictions liées au safe mode et à l'open_basedir. Cependant, les restrictions sont placées uniquement sur le paramètre destination qui permet le déplacement des fichiers chargés dans lesquels filename peut entrer en conflit avec ces restrictions. move_uploaded_file() permet de s'assurer de la sécurité de cette opération en autorisant le déplacement des seuls fichiers chargés via PHP.
ok.
Bref, Je cherche toujours la difference entre copy et move_machin.
-- Guillaume.
ftc
Ce type de vérification est spécialement important s'il est possible que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même aux utilisateurs du même système.
Rien pigé à cette phrase. Je ne voie pas ce que move_uploded_file change ici par rapport à copy. ...
Bref, Je cherche toujours la difference entre copy et move_machin.
Tout simplement move_uploaded_file s'assure que ton fichier est bien un fichier téléchargé et non un fichier déjà présent sur ta machine.
Imagine que tu stockes tes login et mots de passe dans un fichier config.php. Un utilisateur mal intentionné peut faire croire que config.php est un fichier téléchargé ( je te ferai grâce des différentes méthodes que l'on peut utiliser pour le faire, c'est à la porté d'un script kidy ). Toi comme un idiot, tu va juste faire un copy et le beau fichier que tu croyais être une image contient en fait le contenu de config.php, c'est pas top.
Ce type de vérification est spécialement important s'il est possible
que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou
même aux utilisateurs du même système.
Rien pigé à cette phrase. Je ne voie pas ce que move_uploded_file change
ici par rapport à copy.
...
Bref, Je cherche toujours la difference entre copy et move_machin.
Tout simplement move_uploaded_file s'assure que ton fichier est bien un
fichier téléchargé et non un fichier déjà présent sur ta machine.
Imagine que tu stockes tes login et mots de passe dans un fichier
config.php. Un utilisateur mal intentionné peut faire croire que
config.php est un fichier téléchargé ( je te ferai grâce des différentes
méthodes que l'on peut utiliser pour le faire, c'est à la porté d'un
script kidy ). Toi comme un idiot, tu va juste faire un copy et le beau
fichier que tu croyais être une image contient en fait le contenu de
config.php, c'est pas top.
Ce type de vérification est spécialement important s'il est possible que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même aux utilisateurs du même système.
Rien pigé à cette phrase. Je ne voie pas ce que move_uploded_file change ici par rapport à copy. ...
Bref, Je cherche toujours la difference entre copy et move_machin.
Tout simplement move_uploaded_file s'assure que ton fichier est bien un fichier téléchargé et non un fichier déjà présent sur ta machine.
Imagine que tu stockes tes login et mots de passe dans un fichier config.php. Un utilisateur mal intentionné peut faire croire que config.php est un fichier téléchargé ( je te ferai grâce des différentes méthodes que l'on peut utiliser pour le faire, c'est à la porté d'un script kidy ). Toi comme un idiot, tu va juste faire un copy et le beau fichier que tu croyais être une image contient en fait le contenu de config.php, c'est pas top.
vv
"Guillaume Bouchard" a écrit dans le message de news: 44523013$0$16420$
CrazyCat wrote:
</snip>
Note : move_uploaded_file() n'est pas affectée par les restrictions liées au safe mode et à l'open_basedir. Cependant, les restrictions sont placées uniquement sur le paramètre destination qui permet le déplacement des fichiers chargés dans lesquels filename peut entrer en conflit avec ces restrictions. move_uploaded_file() permet de s'assurer de la sécurité de cette opération en autorisant le déplacement des seuls fichiers chargés via PHP.
ok.
Bref, Je cherche toujours la difference entre copy et move_machin.
c'est open_basedir la différence.
si open_basedir est à /home/monsite/ et que upload_tmp_dir (php.ini) ne pointe pas vers un répertoire situé dans /home/monsite/ (par exemple, s'il pointe vers /tmp/), alors copy() ne fonctionnera pas (warning: open basedir restriction in effect) alors que move_uploaded_file() fonctionnera (il fermera les yeux sur le fait que /tmp/ n'est pas dans /home/monsite/ si et seulement si le fichier provient d'un upload http)
si la portabilité de l'application est un souci, il n'y a rien à perdre et tout à gagner à utiliser move_uploaded_file().
-- Guillaume.
"Guillaume Bouchard" <guillaume_fclp@apinc.org> a écrit dans le message de
news: 44523013$0$16420$626a54ce@news.free.fr...
CrazyCat wrote:
</snip>
Note : move_uploaded_file() n'est pas affectée par les restrictions liées
au safe mode et à l'open_basedir. Cependant, les restrictions sont
placées uniquement sur le paramètre destination qui permet le déplacement
des fichiers chargés dans lesquels filename peut entrer en conflit avec
ces restrictions. move_uploaded_file() permet de s'assurer de la sécurité
de cette opération en autorisant le déplacement des seuls fichiers
chargés via PHP.
ok.
Bref, Je cherche toujours la difference entre copy et move_machin.
c'est open_basedir la différence.
si open_basedir est à /home/monsite/
et que upload_tmp_dir (php.ini) ne pointe pas vers un répertoire situé dans
/home/monsite/ (par exemple, s'il pointe vers /tmp/),
alors copy() ne fonctionnera pas (warning: open basedir restriction in
effect) alors que move_uploaded_file() fonctionnera (il fermera les yeux sur
le fait que /tmp/ n'est pas dans /home/monsite/ si et seulement si le
fichier provient d'un upload http)
si la portabilité de l'application est un souci, il n'y a rien à perdre et
tout à gagner à utiliser move_uploaded_file().
"Guillaume Bouchard" a écrit dans le message de news: 44523013$0$16420$
CrazyCat wrote:
</snip>
Note : move_uploaded_file() n'est pas affectée par les restrictions liées au safe mode et à l'open_basedir. Cependant, les restrictions sont placées uniquement sur le paramètre destination qui permet le déplacement des fichiers chargés dans lesquels filename peut entrer en conflit avec ces restrictions. move_uploaded_file() permet de s'assurer de la sécurité de cette opération en autorisant le déplacement des seuls fichiers chargés via PHP.
ok.
Bref, Je cherche toujours la difference entre copy et move_machin.
c'est open_basedir la différence.
si open_basedir est à /home/monsite/ et que upload_tmp_dir (php.ini) ne pointe pas vers un répertoire situé dans /home/monsite/ (par exemple, s'il pointe vers /tmp/), alors copy() ne fonctionnera pas (warning: open basedir restriction in effect) alors que move_uploaded_file() fonctionnera (il fermera les yeux sur le fait que /tmp/ n'est pas dans /home/monsite/ si et seulement si le fichier provient d'un upload http)
si la portabilité de l'application est un souci, il n'y a rien à perdre et tout à gagner à utiliser move_uploaded_file().
-- Guillaume.
Guillaume Bouchard
vv wrote:
si la portabilité de l'application est un souci, il n'y a rien à perdre et tout à gagner à utiliser move_uploaded_file().
Ça je suis d'accord, mais ce n'est pas la préocupation initiale, où est le problème de sécurité ?
Imagine que tu stockes tes login et mots de passe dans un fichier config.php. Un utilisateur mal intentionné peut faire croire que config.php est un fichier téléchargé ( je te ferai grâce des différentes méthodes que l'on peut utiliser pour le faire, c'est à la porté d'un script kidy ). Toi comme un idiot, tu va juste faire un copy et le beau fichier que tu croyais être une image contient en fait le contenu de config.php, c'est pas top.
Ok, l'argument tient... Maitenant j'attend l'exemple. A ce niveau cela veut dire que la faille est DANS PHP. Pour qu'il te refille dans $_FILES['truc']['tmp_name'] un chemin qui correspond à des fichiers de ton repertoire et non pas du répertoire temporaire, c'est sa faute, pas celle de la pauvre fonction copy qui viendra après.
-- Guillaume.
vv wrote:
si la portabilité de l'application est un souci, il n'y a rien à
perdre et tout à gagner à utiliser move_uploaded_file().
Ça je suis d'accord, mais ce n'est pas la préocupation initiale, où est
le problème de sécurité ?
Imagine que tu stockes tes login et mots de passe dans un fichier
config.php. Un utilisateur mal intentionné peut faire croire que
config.php est un fichier téléchargé ( je te ferai grâce des
différentes méthodes que l'on peut utiliser pour le faire, c'est à la
porté d'un script kidy ). Toi comme un idiot, tu va juste faire un
copy et le beau fichier que tu croyais être une image contient en
fait le contenu de config.php, c'est pas top.
Ok, l'argument tient... Maitenant j'attend l'exemple. A ce niveau cela
veut dire que la faille est DANS PHP. Pour qu'il te refille dans
$_FILES['truc']['tmp_name'] un chemin qui correspond à des fichiers de
ton repertoire et non pas du répertoire temporaire, c'est sa faute, pas
celle de la pauvre fonction copy qui viendra après.
si la portabilité de l'application est un souci, il n'y a rien à perdre et tout à gagner à utiliser move_uploaded_file().
Ça je suis d'accord, mais ce n'est pas la préocupation initiale, où est le problème de sécurité ?
Imagine que tu stockes tes login et mots de passe dans un fichier config.php. Un utilisateur mal intentionné peut faire croire que config.php est un fichier téléchargé ( je te ferai grâce des différentes méthodes que l'on peut utiliser pour le faire, c'est à la porté d'un script kidy ). Toi comme un idiot, tu va juste faire un copy et le beau fichier que tu croyais être une image contient en fait le contenu de config.php, c'est pas top.
Ok, l'argument tient... Maitenant j'attend l'exemple. A ce niveau cela veut dire que la faille est DANS PHP. Pour qu'il te refille dans $_FILES['truc']['tmp_name'] un chemin qui correspond à des fichiers de ton repertoire et non pas du répertoire temporaire, c'est sa faute, pas celle de la pauvre fonction copy qui viendra après.