Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 2013
-
29 mars 2011 à 12:02
begueradj
Messages postés273Date d'inscriptiondimanche 4 octobre 2009StatutMembreDernière intervention24 juin 2014
-
24 avril 2011 à 15:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
on peut pousser la protection du repertoire upload par un .htaccess sur un serveur apache
.htaccess
Options -Indexes
Options -ExecCGI
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
#Disabling executing of these files
#could give us an extra layer of protection.
#Further if you are allowing your users only photos
#or picturer, you can restrict other files by placing
#the following code your your .htaccess file.
<Files ^(*.jpeg|*.jpg|*.png|*.gif)>
order deny,allow
deny from all
</Files>
a++
begueradj
Messages postés273Date d'inscriptiondimanche 4 octobre 2009StatutMembreDernière intervention24 juin 20149 24 avril 2011 à 14:08
J'ai une question bête car je suis bête:
Pourquoi le fait qu'un noùm de fichiers contienne des caractères '#[\x00-\x1F\x7F-\x9F/\\\\]#' est un mauvais signe ?
aspkiddy
Messages postés38Date d'inscriptionjeudi 9 juin 2011StatutMembreDernière intervention15 janvier 2014 11 avril 2011 à 18:23
Super COD57,
J'ai fait comme tu dis : j'ai créée le répertoire "upload" et j'ai redefini les droits sur ce répertoire... Alors Ça marche sans erreur...
Merci pour les explication sur pypeg et jpeg...
Bonne journée
cod57
Messages postés1653Date d'inscriptiondimanche 7 septembre 2008StatutMembreDernière intervention11 septembre 201319 8 avril 2011 à 20:57
bonsoir
j'ai retesté mon script sur ovh php 5 , free en php 5, en local wamp2(apache), easyphp, il tourne !
@Server Error
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
oui sans doute le repertoire ... 'chmod' et une commande unix pas 'windows' faudrait
changé les droits sous le serveur iis
soit le fichier est copié mais injoignable soit il l'est pas present du tout.
tu devrais ecrire ce fichier à la main (creer un repertoire upload).
@mkdir($rep, 0705); marche pas sous windows
copy ? bon peut toujours essayer
is_uploaded_file
move_uploaded_file
mais je crois pas que ce soit ça
le type mine
c'est image/pjpeg sous ie
et image/jpeg pour chrome firefox (va savoir pourquoi)
donc il suffit de remplacer
if($v['type'][$ti]==="image/pjpeg"){
par
if($v['type'][$ti]==="image/pjpeg" or $v['type'][$ti]==="image/jpeg"){
a++
aspkiddy
Messages postés38Date d'inscriptionjeudi 9 juin 2011StatutMembreDernière intervention15 janvier 2014 8 avril 2011 à 18:40
Bonjour cod57,
Excellent code pour une application local...
je l'ai testé sur mon ordi, localement, sous Windows (localhost)
Ça marche...
par contre, j'ai changé la ligne 123 où il y a le mime (type) de jpeg pour que ça marche avec JPG
Il fallait écrire "image/jpeg" au lieu de "image/pjpeg"
voici le bon : if($v['type'][$ti]==="image/jpeg"){
par contre, ton code ne marche pas lorsque le met sur un serveur externe (comme goDady) sous Windows (iis)
Voici le message d'erreur :
Warning: copy(upload/04-08-2011-10-07-4d9f32b284398coul.gif) [function.copy]: failed to open stream: Permission denied in D:\Hosting\4568795\html\testr\ftp\index3.php on line 171
et le code de cette ligne est le suivant :
copy($f,$path);
alors, je l'ai mis sur un autre serveur externe sous Windows (iis)
quand je clique sur le bouton "Upload" Ça ne marche pas non plus :
Server Error
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
Alors à mon avis, il faut ajouter aussi d'autres codes au niveau de droit d'écriture... Mais je ne sais pas ce qu'il faut écrire...
Bon courage
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 29 mars 2011 à 15:22
Pour l'extension je pensais en fait a un bête tableau associant l'extension du fichier avec son extension mime histoire de dire je reçois un .jpeg alors son extension mime est => image/pjpeg.
Oui c'est un article très intéressant j'ai beaucoup aime ^^
Ça serai bien que quelqu'un qui s'y donnai donne son avis, je suis curieux dans ce domaine :)
cod57
Messages postés1653Date d'inscriptiondimanche 7 septembre 2008StatutMembreDernière intervention11 septembre 201319 29 mars 2011 à 13:46
@morphinof
Merci pour tes remarques elles sont à prendre en compte !
Oui en effet on peut ameliorer le script qui n'est qu'une base de travail
$ext = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
interressant je peux alors comparer à $extension
comparer le mine avec l'extension
mine -> image/pjpeg et jpg ou jpeg?
ça me semble plus hasardeux peut etre penses tu as truc du genre
exemple :
$mine="image/pjpeg";
$mine=substr($mine,-4);
if($mine===$extension) ...
le nom unique là les méthodes ne manque pas chacun decide
md5(uniqid('H', 5)); oui je pense aussi que c'est mieux
if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
{
exit("Nom de fichier non valide");
}
else if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
a++ bne prog
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 29 mars 2011 à 12:02
Tu t'embetes pour recuperer l'extention de ton fichier :
$ext = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION); et hop ! :)
Ton script est une bonne base mais on peu l'améliorer :
Tu devrai vérifier les caractères du nom du fichier : if(preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $file)) si il contient un de ces caractères c'est plutôt mauvais signe ^^
Chaque fichier a un nom unique mais je pense que md5(uniqid('H', 5)); suffit pour avoir un nom assez unique.
Tu vérifie bien le type mime mais tu ne vérifie pas que l'extension concorde, c'est toujours une sécurité de plus.
Pour être encore plus sécurisé l'idéal serai de regarder le contenu du fichier mais ca deviens plus complexe du coup.
Voila ce qui me viens a l'esprit après je suis loin d'être bon en secu ^^
24 avril 2011 à 15:48
24 avril 2011 à 14:36
la réponse est là
http://phpcodeur.net/articles/php/upload
il faut eviter de faire injecter un shell par une image detournée
on peut pousser la protection du repertoire upload par un .htaccess sur un serveur apache
.htaccess
Options -Indexes
Options -ExecCGI
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
#Disabling executing of these files
#could give us an extra layer of protection.
#Further if you are allowing your users only photos
#or picturer, you can restrict other files by placing
#the following code your your .htaccess file.
<Files ^(*.jpeg|*.jpg|*.png|*.gif)>
order deny,allow
deny from all
</Files>
a++
24 avril 2011 à 14:08
Pourquoi le fait qu'un noùm de fichiers contienne des caractères '#[\x00-\x1F\x7F-\x9F/\\\\]#' est un mauvais signe ?
11 avril 2011 à 18:23
J'ai fait comme tu dis : j'ai créée le répertoire "upload" et j'ai redefini les droits sur ce répertoire... Alors Ça marche sans erreur...
Merci pour les explication sur pypeg et jpeg...
Bonne journée
8 avril 2011 à 20:57
j'ai retesté mon script sur ovh php 5 , free en php 5, en local wamp2(apache), easyphp, il tourne !
@Server Error
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
oui sans doute le repertoire ... 'chmod' et une commande unix pas 'windows' faudrait
changé les droits sous le serveur iis
soit le fichier est copié mais injoignable soit il l'est pas present du tout.
tu devrais ecrire ce fichier à la main (creer un repertoire upload).
@mkdir($rep, 0705); marche pas sous windows
copy ? bon peut toujours essayer
is_uploaded_file
move_uploaded_file
mais je crois pas que ce soit ça
le type mine
c'est image/pjpeg sous ie
et image/jpeg pour chrome firefox (va savoir pourquoi)
donc il suffit de remplacer
if($v['type'][$ti]==="image/pjpeg"){
par
if($v['type'][$ti]==="image/pjpeg" or $v['type'][$ti]==="image/jpeg"){
a++
8 avril 2011 à 18:40
Excellent code pour une application local...
je l'ai testé sur mon ordi, localement, sous Windows (localhost)
Ça marche...
par contre, j'ai changé la ligne 123 où il y a le mime (type) de jpeg pour que ça marche avec JPG
Il fallait écrire "image/jpeg" au lieu de "image/pjpeg"
voici le bon : if($v['type'][$ti]==="image/jpeg"){
par contre, ton code ne marche pas lorsque le met sur un serveur externe (comme goDady) sous Windows (iis)
Voici le message d'erreur :
Warning: copy(upload/04-08-2011-10-07-4d9f32b284398coul.gif) [function.copy]: failed to open stream: Permission denied in D:\Hosting\4568795\html\testr\ftp\index3.php on line 171
et le code de cette ligne est le suivant :
copy($f,$path);
alors, je l'ai mis sur un autre serveur externe sous Windows (iis)
quand je clique sur le bouton "Upload" Ça ne marche pas non plus :
Server Error
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
Alors à mon avis, il faut ajouter aussi d'autres codes au niveau de droit d'écriture... Mais je ne sais pas ce qu'il faut écrire...
Bon courage
29 mars 2011 à 15:22
Oui c'est un article très intéressant j'ai beaucoup aime ^^
Ça serai bien que quelqu'un qui s'y donnai donne son avis, je suis curieux dans ce domaine :)
29 mars 2011 à 13:46
Merci pour tes remarques elles sont à prendre en compte !
Oui en effet on peut ameliorer le script qui n'est qu'une base de travail
$ext = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
interressant je peux alors comparer à $extension
comparer le mine avec l'extension
mine -> image/pjpeg et jpg ou jpeg?
ça me semble plus hasardeux peut etre penses tu as truc du genre
exemple :
$mine="image/pjpeg";
$mine=substr($mine,-4);
if($mine===$extension) ...
le nom unique là les méthodes ne manque pas chacun decide
md5(uniqid('H', 5)); oui je pense aussi que c'est mieux
\x00-\x1F\x7F-\x9F remarque judicieuse
http://phpcodeur.net/articles/php/upload
j'ai lu l'article aussi (-:
if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
{
exit("Nom de fichier non valide");
}
else if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
a++ bne prog
29 mars 2011 à 12:02
$ext = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION); et hop ! :)
Ton script est une bonne base mais on peu l'améliorer :
Tu devrai vérifier les caractères du nom du fichier : if(preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $file)) si il contient un de ces caractères c'est plutôt mauvais signe ^^
Chaque fichier a un nom unique mais je pense que md5(uniqid('H', 5)); suffit pour avoir un nom assez unique.
Tu vérifie bien le type mime mais tu ne vérifie pas que l'extension concorde, c'est toujours une sécurité de plus.
Pour être encore plus sécurisé l'idéal serai de regarder le contenu du fichier mais ca deviens plus complexe du coup.
Voila ce qui me viens a l'esprit après je suis loin d'être bon en secu ^^