Vérifier si existence code PHP dans fichier

bobi
Invité n'ayant pas de compte PHPfrance

14 avr. 2011, 21:47

Bonsoir,

J'utilise un code PHP qui permet de faire un upload de fichiers (gif, png, txt, xls, pdf...)

Une personne mal intentionnée peut mettre un code PHP dans un fichier qui s'appelle par exemple "fichier.php.pdf". L'upload marche sauf que le code se trouvant dans ce fichier est bien exécuté...

Comment puis-je faire pour détourner ces tentatives de hacks ?

Merci pour votre aide

devlop78
Invité n'ayant pas de compte PHPfrance

15 avr. 2011, 00:46

Quand tu appelles fichier.php.pdf, le code php du fichier est exécuté ???

Vérifie bien ça, et si c'est le cas, c'est un problème de configuration serveur.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 avr. 2011, 00:47

salut,

vérifie le type mime afin d'éviter ce genre de chose (il ne faut pas que tu dl de fichier texte ;)).

ton fichier ne peut être exécuté, le serveur ne va (ne doit)pas associer pdf a php, par contre en cas d'include la ça peut poser problème ;)

après il est possible de "falsifier" le type mime, tu peut aussi utiliser getimagesize histoire d'aider la chose, mais c'est surement falsifiable aussi :)

après il y a surement d'autre possibilité, tu peut ouvrir le fichier et voir s'il y a des <?php dedans histoire d'être certain que s'il y a du code il ne sera pas exécuter.

après j'ai plus d'idée ;)

edit : develop78 : normalement c'est pas possible, mais j'ai pu tester que si tu appel le fichier cela peut être possible (par exemple une utilisation foireuse de pseudo frame ;)).

@+
Il en faut peu pour être heureux ......

bobi
Invité n'ayant pas de compte PHPfrance

15 avr. 2011, 09:34

Bonjour,

Merci pour vos réponses.

J'ai hélas testé la chose et...j'ai réussi. J'ai mis dans mon fichier "test.php.pdf" avec à l'intérieur un simple echo.

Lorsque j'upload ce fichier, j'ai le texte de l'echo qui s'affiche une fois l'upload effectué.

moogli, j'ai essayé la solution d'ouvrir le fichier avec :
$contenu = fread(fopen($_FILES['files_name']['tmp_name'], "r"), filesize($_FILES['files_name']['tmp_name']));
$findme = '<?php';
$pos = strpos($contenu, $findme);


if($pos !== false) {
$erreur = 1;
}
Sauf que ça bloque bien lorsqu'il trouve la chaîne, mais en cas de fichier normal l'upload ne marche plus #-o

Eléphant du PHP | 275 Messages

15 avr. 2011, 10:22

J'ai hélas testé la chose et...j'ai réussi. J'ai mis dans mon fichier "test.php.pdf" avec à l'intérieur un simple echo.
Ca veut dire que tu fait un include de ce fichier. Réceptionner un fichier PHP ne le fait pas s'exécuter.

bobi
Invité n'ayant pas de compte PHPfrance

15 avr. 2011, 10:27

Tu veux dire que l'upload réagit comme une action d'include ?

Lors de l'upload, le code PHP se trouvant à l'intérieur du faux PDF a bien été interprété. Donc on peut y mettre n'importe quel code pour récupérer ce qu'on veut.

Eléphant du PHP | 275 Messages

15 avr. 2011, 13:06

Oui, mais si le code présent dans le fichier s'exécupe, c'est que ton code l'exécute, c'est pas le comportement normal de php.

Mammouth du PHP | 1967 Messages

15 avr. 2011, 13:57

Quelle est le code qui propose ce fichier en téléchargement ? un simple lien ou un bout de code php (dans ce cas montre le nous)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

bobi
Invité n'ayant pas de compte PHPfrance

15 avr. 2011, 14:27

Il s'agit d'un code d'upload. Je me suis basé sur le code d'un tuto d'ici.

http://www.phpfrance.com/tutoriaux/inde ... e-fichiers

bobi
Invité n'ayant pas de compte PHPfrance

18 avr. 2011, 08:57

Personne ne peut m'aider ?

Merci