Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2011, 12h26   #1
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Par défaut Protection contre le hacking sur mes upload

Bonjour,

Dans le backoffice de mon site, il y a la possibilité d'uploader des images pour illustrer les pages du site.
Le soucis c'est que des hackers réussissent à accéder à l'upload et téléchargent des images qui ne le sont pas en fait mais ce sont des PHP renommés en .gif ou en .jpg, ils connaissent le chemin où sont les fichiers uploadés et appellent juste donc la fausse image pour lancer le PHP.

Comment vais-je me protéger? Je me demande même comment ils arrivent à exécuter ce fichier php renommé en jpg
  Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h47   #2
Membre régulier
 
Avatar de magicbisous-nours
 
Inscription : octobre 2005
Messages : 201
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 201
Points : 82
Points : 82
Envoyer un message via MSN à magicbisous-nours
Au moment de l'upload tu vérifies comment le type de fichier ? par l'extension ?
Si c'est le cas tu peux tester par le MIME TYPE du fichier uploadé.
Tu as une fonction en PHP appelée finfo qui devrait pouvoir t'aider :
http://fr.php.net/manual/fr/function.finfo-file.php
__________________
[/HS]

une pétition pour la libération des drivers matériels ici
J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source
magicbisous-nours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 14h30   #3
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Oui c'est ça, je testais l'extension! Mais bon tester le contenu du fichier ralentirait aussi le site

Je pense que je dois aussi chercher les moyens pour que le hacker ne puisse pas accéder au formulaire d'upload. Le soucis c'est qu'il faut s'authentifier pour ouvrir le formulaire mais pour l'upload il n'y en a pas puisque j'utilise un code tiers
  Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 15h20   #4
Membre régulier
 
Avatar de magicbisous-nours
 
Inscription : octobre 2005
Messages : 201
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 201
Points : 82
Points : 82
Envoyer un message via MSN à magicbisous-nours
Tester le type MIME est plutôt rapide.... Je l'utilise sans voir de ralentissement (même si j'avoue que mon script n'est pas très long et mon traitement ne fait pas grand-chose)...
De plus en testant le type MIME tu ne lis pas le fichier complet mais des informations que le fichier détient (un peu comme un header d'une requête HTTP pour simplifier)...
Au pire essaye et si tu vois une perte de perf' trop importante reviens sur ta version précédente...
__________________
[/HS]

une pétition pour la libération des drivers matériels ici
J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source
magicbisous-nours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 04h34   #5
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
tu n'as pas le choix faut tester le type MIME comme dit plus haut une extension de fichier n'a aucune valeur sure
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 07h52   #6
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Le fond du problème n'est pas vraiment que le hacker upload un faux jpg ou gif mais qu'il accède au script d'upload sans s'authentifier

L'authentification est gérée par une classe php qui crée une variable globale $GLOBAL["user"], or j'utilise un code tiers (ajaxfilemanager) pour l'upload d'image donc je me me demande comment peut-on l'utiliser dans ajax_file_upload.php de AjaxFileManager for TinyMCE???
  Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 09h08   #7
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Citation:
Envoyé par Helfima Voir le message
tu n'as pas le choix faut tester le type MIME comme dit plus haut une extension de fichier n'a aucune valeur sure
Même ça, il y a déjà une technique pour le contourner par les hackers, de plus le plus drôle: http://www.phpclasses.org/blog/post/...IF-images.html

Ce que je cherche aussi c'est comment interdire l'exécution de scripts dans un répertoire par htaccess ou autre?
En effet, je suis victime du hack avec un upload d'un fichier "pic.php.gif", je ne comprends pas comme le hacker arrive à exécuter ce fichier moitié GIF moitié PHP
  Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 10h04   #8
Membre régulier
 
Avatar de magicbisous-nours
 
Inscription : octobre 2005
Messages : 201
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 201
Points : 82
Points : 82
Envoyer un message via MSN à magicbisous-nours
essaie de mettre les permissions sur ton fichier à 666 (c'est à dire en lecture/écriture mais pas en exécution) mais je ne suis pas sûr que ça fasse grand-chose...
__________________
[/HS]

une pétition pour la libération des drivers matériels ici
J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source
magicbisous-nours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h35   #9
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
Citation:
Envoyé par Lucas Panny Voir le message
Bonjour,
téléchargent des images qui ne le sont pas en fait mais ce sont des PHP renommés en .gif ou en .jpg, ils connaissent le chemin où sont les fichiers uploadés et appellent juste donc la fausse image pour lancer le PHP.
1) un fichier ne se terminant pas par .php ne devrai jamais être exécuté, sinon il y a un gros problème de réglage sur le serveur
vérifier la liste des extensions exécutables

2) test du type mime
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
/**
* @filesource image.gif.php
* @author helfima
* @version 1.0
* Date 19 janv. 2011
*/
 
Header('Content-Type: image/gif');
 
$filename = 'test.txt';
$somecontent = "Ajout de chaîne dans le fichier\n";
 
$fp = fopen($filename, 'w');
fwrite($fp, $somecontent);
fclose($fp);
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
/**
* @filesource fileinfo.php
* @author helfima
* @version 1.0
* Date 19 janv. 2011
*/
 
$finfo = new finfo(FILEINFO_MIME); // Retourne le type mime
 
if (!$finfo) {
    echo "Échec de l'ouverture de la base de données fileinfo";
    exit();
}
 
/* Récupère le mime-type d'un fichier spécifique */
$filename='C:/portal/src/test/image.gif.php';
if(file_exists($filename)){
	echo $filename.' existe!<br>';
}
echo 'mime-type: '.$finfo->file($filename);
resultat de fileinfo.php

Citation:
C:/portal/src/test/image.gif.php existe!
mime-type: text/x-php; charset=iso-8859-1
conclusion: le fichier retourne bien le bon type et ce quelque soit le code dedans par conséquent quand tu upload le fichier a toi de tester le type mime avant la copie dans un répertoire tant qu'il se trouve dans le temp du serveur comme cela fini le problème

ps: si un hacker a déjà déposé des fichiers il faut
bloquer ton site
faire le ménage de fichier intrus
changer tous les passwords

voila j'en sais pas plus
bon courrage
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 20h39   #10
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 198
Points : 198
Salut, il faut que tu arrive a mettre un test de la fameuse variable $GLOBAL["user"] avant que l'upload ne commence.

Tester le type mime, c'est bien aussi et te le conseil, mais ça n'empechera pas l'intrus d'uploader.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 21h49   #11
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
regarde ceci http://php.net/manual/fr/security.globals.php
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 22h09   #12
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 198
Points : 198
Citation:
Envoyé par Helfima Voir le message
Aucun rapport... et puis register globals activé ou non, ça n'empèche pas d'utiliser le tableau GLOBALS et sa porté.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 07h00   #13
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Citation:
Envoyé par nextdev Voir le message
Salut, il faut que tu arrive a mettre un test de la fameuse variable $GLOBAL["user"] avant que l'upload ne commence.

Tester le type mime, c'est bien aussi et te le conseil, mais ça n'empechera pas l'intrus d'uploader.
Oui, le test du type MIMI ne l'empêchera pas, c'est pour ça qu'il uploade un fichier d'extension .php.gif qui contient effectivement du code binaire gif terminé par point-virgule suivi de code PHP malicieux

La portée de $GLOBAL["user"] n'atteigne pas en fait le code tiers d'upload d'image. Donc je remets la classe d'authentification utilisée par mon site dans le code de l'upload donc un 2ème formulaire de connexion lors de l'upload, c'est le mieux qu'on puisse faire
  Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 07h55   #14
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 198
Points : 198
Un bon moyen serait d'avoir un $_SESSION['user'] plutot que $GLOBAL afin de le récupérer facilement sur les pages appelées lors de l'upload.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 10h06   #15
Lucas Panny
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Citation:
Envoyé par Helfima Voir le message
1) un fichier ne se terminant pas par .php ne devrai jamais être exécuté, sinon il y a un gros problème de réglage sur le serveur
vérifier la liste des extensions exécutables

............................

ps: si un hacker a déjà déposé des fichiers il faut
bloquer ton site
faire le ménage de fichier intrus
changer tous les passwords

voila j'en sais pas plus
bon courrage
Je résume donc:
- ce n'est pas un soucis de passwords découverts
- le hacker upload bien un fichier pic.php.gif et il arrive à l'exécuter mais je ne sais pas COMMENT ???

nextdev>
Effectivement c'est de la session, de plus je n'aime pas trop le $_SESSION['user'] car je suis sur du mutualisé
Code :
1
2
3
4
5
6
7
8
9
10
11
 
class MonsiteUser{
        public static function GetInstance() {
            // CLASSIC
            if (empty($_SESSION["monsite" . session_id()])) {
                $_SESSION["monsite" . session_id()] = new MonsiteUser;
            }
            return $_SESSION["monsite" . session_id()];
        }
.................
$GLOBALS["user"] = MonsiteUser::GetInstance();
  Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 13h29   #16
Membre régulier
 
Avatar de magicbisous-nours
 
Inscription : octobre 2005
Messages : 201
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 201
Points : 82
Points : 82
Envoyer un message via MSN à magicbisous-nours
Pour résumer ce qui a été dit :
- Vérifie la conf de ton serveur (httpd.conf pour apache)
- Lors de l'upload vérifie le type MIME du fichier uploadé et refuse tout ce qui n'est pas une image
(un simple
Code :
1
2
3
4
 
if(substr($t_mime,0,5) == 'image') { 
// ton code qui gère les fichiers images (redimensionnement, déplacement, etc...)
}
suffira)
__________________
[/HS]

une pétition pour la libération des drivers matériels ici
J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source
magicbisous-nours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 15h20   #17
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 198
Points : 198
Citation:
Effectivement c'est de la session, de plus je n'aime pas trop le $_SESSION['user'] car je suis sur du mutualisé
Béh sans stocker l'info que l'user est deja logger, c'est sur que tu devras lui redemander. Au pire tu rajoute juste $_SESSION['user_is_logged']=1 (en parallèle a ton GLOBAL['user']) que tu controle dans la page d'upload

Pourquoi ne pas utiliser la session, es tu chez ovh ?
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 15h37   #18
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
c'est quoi le problème des sessions chez OVH? chez moi tout fonctionne à merveille.

je suis un peu déçu parce que le titre du message était croustillant et que la solution est plutôt standard.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 15h42   #19
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 559
Points : 1 559
Et tu as pensé à faire un getimagesize lors de l'upload de tes images ? Normalement ce test est assez restrictif et comme vous n'en avez pas encore parlé...
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 22h00   #20
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 198
Points : 198
Il n'y a justement pas de problème chez ovh, et d'ailleurs le répertoire /tmp/ ou sont stocké les sessions par défaut n'est plus accessible sur leurs serveurs.

Donc leur config de base en mutualisé ne pose a priori plus de risque, ou pas plus qu'un dédié.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h38.


 
 
 
 
Partenaires

Hébergement Web