SÉCURISER LES SESSIONS PHP

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 18 juin 2004 à 14:11
OniTalus Messages postés 39 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 20 juin 2005 - 13 mai 2005 à 22:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23799-securiser-les-sessions-php

OniTalus Messages postés 39 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 20 juin 2005
13 mai 2005 à 22:35
Supeeeer... (je parle du gamin).

Sinon ce code peut etre utile (pas regardé en detail m'enfin)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 mai 2005 à 18:23
Et le gamin de 14 ans a posté son comm
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
11 mai 2005 à 09:34
La classe...

Pas besoin d'une source comme sa...

Vois pas pk tu existe encore sur code source avec toute les critique que tu fais sur toute les source des autre membre
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 mars 2005 à 10:50
Bah une source quand elle fonctionne et qu'il n'y a pas de bugs je l'abandonne, oui, enfin je ne la met plus à jour si c'est ça que tu veux dire. Cette source est dans ce cas, l'espace membres aussi, la classe mySQL presque...

Et quand y'a des problèmes je mets à jour, y'a qu'à regarder l'espaces membres (sa date de parution et mise à jour)

a +
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
1 mars 2005 à 09:36
Je ne fais rien dire à personne... Ta réponse est étrange, car ça fait quand même 2 fois que tu me dis que quelques de tes sources sont abandonnées. Ce qui compte est déjà l'idée... Après on adapte dans la mesure du possible.

;)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
16 févr. 2005 à 21:46
y'en a plus, je l'ai abandonnée cette classe depuis longtemps, l'avantage qu'elle a est que même si quelqu'un trouve ton id de session il faut qu'il connaisse le nom des différentes variables, et qu'il le transpose en md5 ensuite...

Bref si tu te fais voler seulement ton ID de session ça ne fonctionnera pas ;-)

Après cette source est dépassée si c'est ça que tu veux me faire dire, et je suis tout à fait d'accord avec toi

a ++
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
16 févr. 2005 à 21:35
J'aurais presque envie de dire que si le gars récupère l'ID de session cela ne l'empêchera pas de créer un cookie, encore moins si le codage est uniquement du MD5. Faut combiner les fonctions de codage, voir coder les PHPSESSID des URL. Ca par contre, je ne sais pas si ça pourrait marcher. En tout cas, le principe évoqué par Anthomicro est assez bon. Mais je ne vois pas non plus l'intérêt d'un pirate de venir parasiter le panier d'un camarade qui viendrait faire ses courses. Faudrait donc que Anthomicro nous expose des champs d'application de son code source...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 juin 2004 à 10:17
Au fait : j'ai reçu un message privé de quelqu'un qui voulait que je lui incorpore ma classe dans son code, j'ai supprimé par mégarde le message. Voici donc le code en question :

Salut !

le problème dans ton script est que tu n'utilises pas les variables globales (à part pour les sessions).

Je vais donc faire ça au pif, tu corrigeras en fonction d'où viennent les variables.

D'abord tu enregistres la classe (mon script) dans un fichier par exemple dans un répertoire classes/ma_classe.inc.php

Ensuite dans chaque fichier qui nécessite les sessions, tu fais ceci :

include 'classes/ma_classe.inc.php';

$sessions = new session();

/*
JE T'AI MIS TOUTES LES VARIABLES DANS LA
CONDITIONMAIS 'ZIM' SUFFIT (OU 'ZIM_PASS' OU PHPSESSID)
*/

if(!$sessions->existe('zim') OR !$sessions->existe('zim_pass') OR !$sessions->existe('PHPSESSID'))
{
echo 'session expirée ou invalide';
header("location: index.php");
exit();
}
else
{
include 'configuration.inc.php';

//On selectionne la base de données
/* Je suppose que les champs proviennent d'un formulaire en method=POST */

$password=md5($_POST['password']);
// On selectionne quand le champs login correspond au login entré
// et le champs passe au pass entré.
//$sql "SELECT * FROM utilisateurs WHERE nom_utilisateur'".$_POST['login']."' and mot_passe ='$password'";
$sql "SELECT * FROM comptemembre WHERE user'".$_POST['login']."' and pass ='$password'";
// On execute la requête de selection
$res = mysql_query($sql);
$result=mysql_fetch_object($res);

$user=$result->user;
$pass=$result->pass;

//session_register ("user");
$sessions->attribuer('zim',$user);
$sessions->attribuer('zim_pass',$pass);


$sessions->attribuer('PHPSESSID',$PHPSESSID) //RISQUE D'Y AVOIR UN CONFLIT AVEC L'AUTRE COOKIE, NE MET PAS CETTE LIGNE

// On compte le nombre de ligne des resultats
// 1 : si valide 0 si aucun login ne correspond


// On compte le nombre de ligne des resultats
// 1 : si valide 0 si aucun login ne correspond
$exist = mysql_num_rows($res);

// Si la variable $exist = 0 --> login inexistant ou faux pass
if(!$exist) {
// On affiche ce message d'erreur
// echo "<center>Veuillez vérifier vos données</center>";

// On inclut le formulaire d'identification
include 'aide.php';
}
else {

echo "<meta http-equiv='Refresh' content='0; url=/Ria/espace.php?PHPSESSID=$PHPSESSID'>";
}

Voilà j'espère que ça a pu t'aider

N'oublie pas cependant, le visiteur doit accepter les cookies sans quoi il se verra refuser l'accès.

a +++
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 juin 2004 à 10:07
oui c'est vrai, j'en suis conscient, mais je n'aime pas voir les ID de session dans l'url !

Ceci dit on peut très bien rajouter ta portion de code dans ma classe pour avoir une sécurité presque inviolable (à part si le mec se fait prendre son IP mais là faut vraiment qu'il est envie de hacker le site) !

Bonne journée !
UniCyclon Messages postés 38 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 27 février 2006
21 juin 2004 à 10:00
Je ne corrigerai pas car dans le fond tu as tout à fait raison, mais ces personnes représentent une infime partie des visiteurs de Yahoo! (moins de 10 par jour), et, de plus, ton système ne marche pas non plus si le visiteur n'accepte pas les cookies, ce qui est beaucoup plus fréquent (environ 1%, soit un peu moins d'un million de visiteurs par jour).

A choisir entre les deux, je prends donc mon système :)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 juin 2004 à 09:42
C'est pas mal, mais si ton visiteur a une ip dynamique, qui change à chaque nouvelle requête, ça ne fonctionne plus non (corrige si je me trompe) ?

a ++
UniCyclon Messages postés 38 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 27 février 2006
21 juin 2004 à 09:21
Si vraiment tu veux protéger tes sessions efficacement sans passer par la vérification des cookies, vulnérable, tu peux faire un truc comme ça : Quand tu ouvre ta session (après la connexion de l'utilisateur par exemple), tu exécute une commande du genre :

$_SESSION['checkcode'] = sha1 ($HTTP_USER_AGENT . ':' . $REMOTE_ADDR);

Et sur chaque autre page de ton site, si les informations dispo dans la session t'indiquent que le visiteur est bien connecté, tu refais cette somme de contrôle et tu la compare à celle stockée dans la session, en utilisant par exemple

if (strcmp ($_SESSION['checkcode'], sha1 ($HTTP_USER_AGENT . ':' . $REMOTE_ADDR) != 0)
{
echo 'Vous n'êtes pas autorisé à voir cette page';
exit;
}

C'est la méthode utilisée sur le site de Yahoo! pour lequel j'ai travaillé, et elle donne d'assez bons résultats.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
19 juin 2004 à 08:07
ici tu n'as pas besoin, une simple inclusion de classe et elle s'occupe de tout !
cs_rob85 Messages postés 16 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 29 octobre 2006
19 juin 2004 à 06:48
Je tiens à préciser pour certains que si l'on veut utiliser les sessions, il faut écrire dés la première ligne de votre fichier php :

"session_start();" sinon php renvoie une erreur...

Dans ce cas-ci, je ne sais pas si ca fonctionne mais bon, c'était juste pour rappeler à certains qui auraient la tête ds les nuages..

@+ et bon PHP !

R)0(b
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
18 juin 2004 à 21:21
"Si le gars accepte les cookie, l'id est déjà enregistré sur son poste dans un cookie" > Oui je suis d'accord, mais si tu choppes l'id de session, hop c'est mort, tandis que là, même si on arrive a chopper ton id de session, si les cookies qui sont sur ton ordi ne correspondent pas à ceux du serveur, cela ne fonctionne pas, alors qu'avec une session un simple vol d'id et c'est fini

"S'il n'accepte pas les cookies, je vois pas l'intérêt de ta classe..." > Tout à fait, je l'ai écrit plus haut....

"Le principe des sessions n'est-il pas d'éviter les cookies ?" > J'aime pas les identifiants qui trainent dans l'url, c'est pas propre lol

a ++
cs_Nox Messages postés 415 Date d'inscription mardi 3 avril 2001 Statut Membre Dernière intervention 26 avril 2008
18 juin 2004 à 21:14
Le principe des sessions n'est-il pas d'éviter les cookies ?
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
18 juin 2004 à 16:27
Salut!
Je vois pas trop l'intérêt:
- Si le gars accepte les cookie, l'id est déjà enregistré sur son poste dans un cookie
- S'il n'accepte pas les cookies, je vois pas l'intérêt de ta classe...

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
18 juin 2004 à 14:11
Merci d'avance pour vos commentaires

a +