expression reguliere
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!
+++
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.
OK merci ca marche bien,
en ce qui concerne les injections, ce n'est pas grave, c'est un script pour moi.
+++
Personnelement j'aurais utilisé la fonction glob :)
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
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
...
gcc -o toto.jpeg toto.c
chmod +x toto.jpeg
./toto.jpeg
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
le 02/05/2006 à 21:49
Bzh
Ouaip oui ch'ui d'accord !
Mais en pratique ??? Tu fais comment pour l'exécuter ????
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.
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
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...
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: