Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
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 30/12/2006, 13h07   #1
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Par défaut [Sécurité] Sécurité et variable de session

J'ai crée une application qui fait l'objet d'un probleme de hack sur securityfocus...
J'utilise une variable de session de la facon suivante :

Sur une page accueil, formulaire d'identification.
Si utilisateur présent dans la base, j'ouvre une variable de session et pointe vers la page administrateur

En haut de cette page, j'ai meme rajouté...

Code :
 if ($_SESSION['nom']<>'Administrateur') { header("Location: ../index.php");}
Avec ce code ci-dessous et qui fonctionne parfaitement, on peut directement arriver à la page administration (en recupérant mais je n'en suis pas sur, un ancien identifiant de session sur le serveur ??)

Comment corriger le problème ?
J'ai tjrs pensé que les variables de session permettaient un accés securisé..

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function sockxp($host,$path,$prox,$wanted) 
{ 
        $hope = !empty($prox) ? $prox : $host.':80'; 
        preg_match("/^(\S*):([0-9]+){1,5}/",$hope,$hosta); 
        $hosh = $hosta[1]; 
        $hosp = $hosta[2]; 
 
        $recv = ''; 
        $meth = $_SERVER['REQUEST_METHOD']; 
        if(empty($hosh) || empty($hosp)) exit(1); 
 
 
        if(!$sock = fsockopen($hosh,$hosp)) exit(1); 
        $dat = $meth." http://".$host; 
 
        if($meth === "POST") $dat .= "/".str_replace("administration//","",$wanted); 
        else $dat .= $path.$wanted; 
 
        $dat .= " HTTP/1.1\r\n"; 
        $dat .= "Host: $host\r\n"; 
        $dat .= "Connection: Close\r\n"; 
 
        if($meth === "POST") { 
                $postdata = get_postdata(); 
                $dat .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
                $dat .= "Content-Length: ".strlen($postdata)."\r\n\r\n"; 
                $dat .= $postdata."\r\n\r\n"; 
        } else { 
                $dat .= "\r\n"; 
        } 
 
 
        fputs($sock,$dat); 
        while(!feof($sock)) $recv .= fgets($sock); 
        fclose($sock); 
 
 
        return html_replace($recv); 
} 
 
 
function html_replace($htmlc) 
{ 
        global $host,$path,$prox; 
        $iniv = $_SERVER['PHP_SELF']."?host=$host&path=$path&prox=$prox&wanted="; 
        $newc = str_replace("action=\"","action=\"$iniv",$htmlc); 
        $newc = str_replace("=\"..","=\"http://${host}${path}administration/..",$newc); 
        $newc = str_replace("a href=\"","a href=\"$iniv",$newc); 
        $newc = str_replace("MM_goToURL('parent','","MM_goToURL('parent','$iniv",$newc); 
        $newc = explode("\n",$newc); 
        for($i=0;$i<count($newc);$i++) { 
                if(preg_match("/DOCTYPE/",$newc[$i])) $v=1; 
                if($v) $nnewc .= $newc[$i]; 
        } 
        return $nnewc; 
} 
 
 
function get_postdata() 
{ 
        $postdata = ''; 
        foreach($_POST as $key => $value) { 
                $postdata .= $key."=".$value."&"; 
        } 
        return $postdata; 
} 
?>
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 00h18   #2
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
Pour moi, la 1er fonction est juste un browser en PHP... Par contre, je comprend pas :

Code :
if($meth === "POST") $dat .= "/".str_replace("administration//","",$wanted);
Qu'est ce que c'est que ce "administration" et ce qu'est ecnsé contenir $wanted...

Ensuite, pour le html_replace, je comprend pas ce que fait le MM_goToURL (j'aime pas javascript)...

T'ain, c'est super interessant (et flippant) comme problème ! si t'en découvre d'avantage, pourrais tu le partager avec nous ?
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 22h03   #3
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
Ce code me perturbe a mort...

Pourrions nous avoir quelques précisions ? Le serveur que se code sert a hacké, il est héberger par qui ? C'est un serveur windows (easyPHP) ou linux ?

ça donne quoi si tu remplaces

Code :
if ($_SESSION['nom']<>'Administrateur') { header("Location: ../index.php");}
par

Code :
1
2
 
if ($_SESSION['nom']<>'Administrateur') { echo '<script language="javascript">self.location.href = "../index.php"</script>'; exit();}
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2009, 11h50   #4
Modérateur
 
Avatar de ymoreau
 
Homme Yoann Moreau
Ingénieur en laboratoire de recherche
Inscription : septembre 2005
Messages : 724
Détails du profil
Informations personnelles :
Nom : Homme Yoann Moreau
Âge : 26
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur en laboratoire de recherche
Secteur : Enseignement

Informations forums :
Inscription : septembre 2005
Messages : 724
Points : 1 130
Points : 1 130
Je vois qu'un sujet existe alors je le up. Je me demandais de manière plus générale que le cas présenté si les variables de session étaient relativement protégées, c'est à dire est-ce qu'il est dangereux de placer des données sensibles dans les variables de session ? Sous entendu est-ce qu'il est aussi difficile de récupérer des variables de sessions que de voler une session ?
ymoreau 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 07h27.


 
 
 
 
Partenaires

Hébergement Web