PHP : Session , sécurité , cookies

WRInaute discret
Bonjour,

1 ) J'aimerais faire un système d'espace membres par sessions ( car les cookies ça pose des problèmes au niveau de la sécurité ) mais j'aimerais que le système garde un souvenir du visiteur pendant une durée " illimitée " , afin que le visiteur n'ait pas à se re-connecter à chaque fois qu'il ferme son navigateur.

Est-ce possible ?

2 ) Est-ce que le fait de mettre un

Code:
<?php echo $variable; ?>

Tout en étant en register_globals = on peut constituer un trou de sécurité ?

Merci beaucoup et bonne journée

KL
 
WRInaute accro
kinglouis a dit:
les cookies ça pose des problèmes au niveau de la sécurité
En quoi ? Je veut bien plus de détails ...

Autrement, non, une session, de par son nom, ne dure que le temps de la session, et n'est pas illimité. Il faut un cookie pour être illimité.

Après, $variable représente quoi ?
Ta session ? Alors non, c'est pas bon, utilise $_SESSION['variable']
 
WRInaute discret
1 ) Ben immagine que tu stockes l'id du membre dans un cookie et que le visiteur modifie son cookie > il peut faire ce qu'il veut , et se faire passer pour n'importe quel autre membre .

Avec les sessions , il ne peut pas modifier cet id !

2 ) Pour la variable , ça représente un message que je souhaite afficher .

Genre " index.php?message=votre inscription est réussie " affiche " votre inscription est réussie " sur la page index .

Ca peut constituer une faille ?
 
WRInaute accro
moi j'utilise le cookie seulement pour faire partir la session, pour qu'en tant que visiteur, il n'y ai pas de session (pour le referencement) et des identification, je crée un cookie, et si le cookie existe -> session_start()

ensuite, que tu soit en register_global on ou off, il faut coder proprement, c'est à dire $_GET['varible'] pour les variables passées par l'URL, $_POST['variable'] pour les variables de formulaire, et $_SESSION['variable'] pour les variables de session. utiliser $variable directement ouvre les portes aux failles de sécurité :)
 
WRInaute accro
Que tu crois !
La session fonctionne de la manière suivante :
- Lors de l'initialisation, un sessid est attribué à l'utilisateur. celui-ci est placé dans un cookie de session
Et les données de la session sont placées sur le serveur.
Lorsque tu récupère une donnée de session, il prends celle qui a le bon identifiant de session.

Tu modifie le cookie de session, tu modifie l'identifiant à ton gré.

MAIS il faut encore connaitre l'identifiant de session de l'autre visiteur ...

Pourquoi ne pas partir sur une idée similaire pour tes cookies ? Un identifiant de session cookie généré aléatoirement, mais unique, et qui te permet de récuperer les informations de l'utilisateur.

Pour $variable, mets : htmlentities($_GET['variable']);
Et ca ne posera pas de problèmes.
 
WRInaute impliqué
C'est simple tu mets deux cookies, un avec un identifiant généré aléatoirement de 23 caractères par exemple faudra déjà avoir de la chance pour tomber sur une clefs de 23 caractères existante et ensuite dans le deuxième cookie le mot de passe.

Je vois pas comment a moins d'avoir une mega chance quelqu'un peut alors trouver la paire. Et enfin si il y a plus de trois echec tu bloques l'accès c'est à dire que tu ne test plus si le mot de passe correspond jusqu'a déblocage du compte.

Encore une fois un cookie jusqu'a preuve du contraire n'est pas une faille de sécurité c'est uniquement une info qui est stocké sur l'ordi de l'internaute les failles sont l'utilisation qu'on en fait si par exemple l'internaute partage sont disque complet evidement c'est pas good, si l'internaute n'est pas chez lui c a d dans un NET CAFE ou autre alors il faut le prévenir de ne pas enregistrer ses cookies.

A+
 
WRInaute discret
Tout d'abord , merci pour vos réponses , je vais encore vous demander quelques précisions :

1 ) Les cookies et les sessions

moi j'utilise le cookie seulement pour faire partir la session, pour qu'en tant que visiteur, il n'y ai pas de session (pour le referencement) et des identification, je crée un cookie, et si le cookie existe -> session_start()

>> En quoi ce cookie diffère-t-il du cookie souvent nomné PHPSESSID qui est créé automatiquement par l'utilisation des sessions ?

Pourquoi ne pas partir sur une idée similaire pour tes cookies ? Un identifiant de session cookie généré aléatoirement, mais unique, et qui te permet de récuperer les informations de l'utilisateur.

Quelle serait la différence avec le cookie créé par les sessions ?



C'est simple tu mets deux cookies, un avec un identifiant généré aléatoirement de 23 caractères par exemple faudra déjà avoir de la chance pour tomber sur une clefs de 23 caractères existante et ensuite dans le deuxième cookie le mot de passe.

Et moi après , comment je retrouve l'identifiant et le mot de passe ?
Moi en fait il faut qu'un " id " soit transmis de page en page mais si je le génère aléatoirement comme tu dis , comment je retrouve le bon vrai " id " ?

2 ) echo $variable;

Pour $variable, mets : htmlentities($_GET['variable']);
Et ca ne posera pas de problèmes.

Ok merci je ferai ça

3 ) Register_globals

Est-ce que , si on est à register_globals on ( donc le truc pas top niveau sécurité ) , qu'on écrit echo $POST['variable']; et qu'on fait page.php?variable=lalalalalala , ça va afficher lalalalala ? ( en clair est-ce qu'en register globals on , même si on met $POST , les variables passent par URL ? )

Merci !
 
WRInaute accro
le 1 : Ce qui change, c'est que ton cookie reste sur la durée. Un cookie de session est supprimé en fin de session.

Pur récuperer ton identifiant généré aléatoirement, il suffit de le stocker sur ton serveur.
Dans ta base de données, tu ajoute un champ sessid pour ton utilisateur, et tu place cet identifiant dedans.
 
WRInaute discret
(soit donc un code du genre :

Code:
A LA CONNEXION
//création de la clef :
$session=md5(microtime());
//inscription des variables d'indentification :
setcookie('id',$id,time()+60*60*24*30,'/',false);
setcookie('clef',$session,time()+60*60*24*30,'/',false);
//tu stock dans ta BDD $session
...


SUR TOUTES TES PAGES 
//si pas connecté et si un cookie est déclaré :
...
//tu check la base pour regarder si la variable de session est la bonne :
$sql='... WHERE id='.$_COOKIE['id'].' AND session='.$_COOKIE['session'];
//s'il te sort un resultat, tu connect le gars, sinon tu ne fais rien

Pour $variable, mets : htmlentities($_GET['variable']);
Et ca ne posera pas de problèmes.
Ca n'a rien à voir. Regarde plutot la doc pour comprendre comment ca marche. C'est utile pour la sécurité mais il ne faut surtout pas placer ca partout.
 
WRInaute discret
Ok merci pour le code , je vois mieux comment faire .

Peux-tu être plus précis à propos du htmlentities($_GET['variable']); , c'est pas bon de mettre ça partout ?
 
WRInaute discret
la doc dit que cette fonction transforme :
* "&" (et commercial) devient "&amp;"
* """ (guillemets doubles) devient "&quot;" lorsque ENT_NOQUOTES n'est pas utilisée.
* "'" (single quote) devient "'" uniquement lorsque ENT_QUOTES est utilisée.
* "<" (inférieur à) devient "&lt;"
* ">" (supérieur à) devient "&gt;"

Ca a un rapport avec la sécurité car évite que quelqu'un entre "<?php echo'machin'; ?>" et que ce texte doit être écris sur un fichier de ton serveur par exemple mais si tu le fais systématiquement :
1/ tu ralentis ton code avec une fonction inutile
2/ tu aura un prb si tu comparer ce type de valeurs if(htmlentities('vi<tore')=='vi<tore');

=> à utiliser donc mais seulement quant il y a besoin... (logique non ?)
 
Discussions similaires
Haut