expression reguliere

Répondre
maxroucool
le 28/04/2006 à 15:08
maxroucool
Slt tlm,

je voudrais charger des images qui ne sont que des JPG. Donc les extensions possibles sont:
jpg, jpeg, JPG, JPEG.

J'ai donc fais ca comme code:
$dossier = opendir ($dir);
while ($fichier = readdir ($dossier)) {
if (ereg("^".$_GET['f']."\.(jpg|jpeg)*$i",$fichier)) {
$image = $fichier;
$image_existe = 1;
}
}
if($image_existe != 1) $image = "image.jpg"; //image de secours!


Le probleme vient de l'expression reguliere, il me charge aussi les png!!

Comment dois-je faire mon expression reg?


Merci bp!
+++
LupusMic
le 28/04/2006 à 17:10
LupusMic
Il y a trois problèmes avec ton code.
- l'usage de ereg est erronée
- exécution possible par regex injection
- l'extension ne détermine pas le type de fichier

Il est particulièrement déconseiller d'utiliser « l'extension » du nom de fichier, puisque sous des systèmes bien pensés, c'est superflut.

si tu tiens absolument à déterminer le type de fichier via l'extension (et donc risquer des injection de code :

ergegi('^.*\.(jpeg|jpg)$', $fichier) ;
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
maxroucool
le 28/04/2006 à 19:13
maxroucool
OK merci ca marche bien,

en ce qui concerne les injections, ce n'est pas grave, c'est un script pour moi.

+++
mojorisin
le 02/05/2006 à 19:44
mojorisin
Personnelement j'aurais utilisé la fonction glob :)
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
Bzh
le 02/05/2006 à 19:53
Bzh
Quel est le danger d'utiliser l' extention pour définir le type d'un fichier ???

Si tu arrives à exécuter un exécutable ayant comme extention jpeg, tu m'appels smiley...
LupusMic
le 02/05/2006 à 21:23
LupusMic
gcc -o toto.jpeg toto.c
chmod +x toto.jpeg
./toto.jpeg
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Bzh
le 02/05/2006 à 21:49
Bzh
Ouaip oui ch'ui d'accord !

Mais en pratique ??? Tu fais comment pour l'exécuter ????
LupusMic
le 02/05/2006 à 22:41
LupusMic
Le problème que je pointait n'était pas un problème de sécurité, mais un problème d'appriori de développeur : un fichier possède une extention, et cette extension renseigne sur le type de fichier.

En ce qui concerne le problème de sécurité, je me suis un peu planté. En effet, ce qui me chiffonait était la variable injectée dans la regexp. Or, j'étais convainqu (mais je n'ai pas retrouvé la doc), que l'on peut exécuter du code directement depuis une expression régulière.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
bibi
le 03/05/2006 à 00:15
bibi
le probleme des extensions comme l'a démontré Lupus est que ca a été intégré par Windows car sous Linux, cela n'existe pas. Donc il faut trouver une autre methode.
commit suicide
Bzh
le 03/05/2006 à 01:11
Bzh
Oui, mais même sous Linux il n'est pas possible de le rendre exécutable directement, de l'exterieur !

Lorsque php sauvegardera ton image, il est évident qu'il ne le rendra pas exécutable.

Heureusement d'ailleur...
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours