|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 14 ![]() |
Bonjour,
Une grande question me tarabuste. Voila en préambule le cheminement qui m'y a amené, puis la question: Me renseignant sur les possibles failles dont un internaute malveillant disposerait, j'ai eu pas mal de renseignements très utiles. Cependant, je sais aussi par expérience qu'un fichier image peut très bien renfermer un script malveillant et même en PHP... fâcheux, non? Je suis tout de même capable, j’espère, de m'assurer que cette image uploadée chez moi ne contienne pas de tels scripts. Mais c'est là que vient cette fameuse question qui concernerait ceux qui ne font pas cette vérification: Si aucun vérification n'est faite et que le nom de l'image correspond au schéma d'un chemin de fichier, n'y a t'il pas un énorme risque? Considérons le scenario suivant - je suis X, novice en sécurité, je ne connais pas le regex, je ne suis même pas au courant qu'un fichier image peut être malveillant, je conserve le nom initial de l'image, je stocke ça un peu n'importe comment et je n'ai jamais entendu parlé de Rewrite... - je suis Y, un internaute malveillant. je sais pertinemment qu'on ne peut pas mettre de slash dans un nom de fichier. Par contre je sais aussi qu'on peut très bien remplacer le slash par " urldecode('%2F') " je viens de faire le test. Je tombe sur un site d'amateur en PHP où il y a quand même pas mal d'inscrits. Plutôt que de commencer par une attaque XSS ou une injection, j'ai déjà un script tout fait dans un fichier. Je regarde la source de la page et je vois le lien de l'image du site "<img src="dossier_untel/dossier_image/monlogo.gif". je regarde un peu le profil de monsieur pierrepauljacques et je découvre que les images sont stockées dans "/dossier_user/images/pierrepauljacques.gif". D’après vous, si Y décide d'uploader une image nommée: "str_replace('+','',"..+urlencode('%2F')..+urlencode('%2F')+dossier_untel urlencode('%2F')+dossier_image+urlencode('%2F')+monlogo.gif")" pourrait elle remplacer le logo initial du site par son script malveillant? Avec mon code tout pourri, peut-être pas, mais n'est ce pas encore une faille possible pour un expert en la matière? |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 808 ![]() |
Où as-tu vu que c'est l'utilisateur qui décide où l'image sera uploadée sur le serveur ?
![]() Les fichiers uploadés sont stockés dans un répertoire provisoire pour permettre de faire les vérifications nécessaires dessus.
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 14 ![]() |
Ce que je sais à coup sûr, c'est que l'image est traitée puis placée dans le dossier prévu par le script.
Le nom de l'image envoyée est, me semble t'il, affecté dans le tableau $_FILE à la clé [name]. Pour rappel, X est un novice qui n'est pas au fait de tout ça si l'on garde ce nom, ça donnera "../../dossier_untel/dossier_image/monlogo.gif" sauf erreur de ma part... les url_decode étant interprétés puisque stockés dans une variable... alors quel chemin pour le déplacement du fichier quand X voudra le mettre dans le bon dossier? dossier_user/images/../../dossier_untel/dossier_image/monlogo.gif Voila le risque dont je parle. Je ne fais que poser une question. Je ne suis qu'un codeur du dimanche, certes, mais de deux choses l'une: soit ma question est pertinente et mériterait de s'y pencher avec un peu d’intérêt, soit elle est stupide mais dans ce cas je préférerais qu'on m'explique pourquoi sans dénigrer une personne qui se pose des questions PS: une faute d’étourderie dans mon premier post, j'ai mis urlencode eu lieu de decode, mais vous aurez corrigé de vous même :p |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
Elle est courte, mais pertinente. Si tu avais fait des essais tu aurais vu et compris pourquoi cette réponse. Citation:
La seule info obtenue sera dans cet exemple : monlogo.gif (c'est tout) Et pas ../../dossier_untel/dossier_image, c'est toi qui imagine que ... Comme ça été dit, ce n'est pas l'utilisateur qui décide où sera déposé l'image ou le fichier, mais le codeur (débutant ou pas peu importe). Le fichier uploadé est déposé dans un répertoire temporaire avec un nom temporaire $_FILES['image']['tmp_name']. Ce répertoire est défini dans le php.ini, en aucun cas cette info vient de l'utilisateur. On a aussi son nom d'origine $_FILES['image']['name']. Ces noms (temporaire et original) ne sont que des noms, et non pas des chemins. Nulle part il y a une info concernant un éventuel chemin défini par l'utilisateur comme tu le décrit dans ton scénario. Suffit pour de faire un print_r($_FILES['image']) pour le vérifier. Une fois uploadé dans ce répertoire temporaire, c'est le codeur qui indiquera un chemin (son chemin, un chemin lié au disque de son serveur) où déposer/déplacer cette image avec la fonction move_uploaded_file(). Qu'il soit possible de se faire pirater lors d'un traitement d'upload, oui, le risque 0 n'existe pas de toute manière, mais le scénario que tu montre me parais impossible (concernant les chemins j'entends). Par contre, pour ce qui est du contenu du fichier (de la soit disant image), il est vrai que peu de précautions sont prises à ce niveau. Vérifier le contenu uploadé est un mécanisme très certainement complexe et lourd à la fois.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 14 ![]() |
Et bien voila une explication qui me laisse tout con, oui maintenant que tu m'expliques comme ça, je me sentirais presque ridicule
En tout cas ça me rassure, ça fera déjà ça en moins... merci ^^ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com