|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bonjour,
Je viens laborieusement de "terminer" un script anti vol de session, recommandé par Wanania, sur quelques obscures posts précédemment ouvert. Mais maintenant si on vol la session (je passe les détails) et que le script veut se déconnecter, j'obtiens l'erreur Code :
Quelqu'un peut m'en dire plus ? |
||
|
|
00
|
|
|
#2 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Je suis toujours pas mort, hehe !
Alors voilà, j'avais écrit ça en haut de la page : Code :
Maintenant je n'ai plus le message d'erreur. Mais je veux quand même conserver le session_regenerate_id. Je fais comment s'il vous plait ? |
||
|
|
00
|
|
|
#3 | ||
![]() ![]() |
si tu fais un session_destroy, la session est forcément détruite... ça ne sert pas à grand chose de faire un regenerate_id avant...
par contre, ce que tu pourrais faire, qui aurait le même effet, c'est : Code :
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
||
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Oui mais je n'ai pas été clair.
Je fais le session_regenerate_id() en haut de l'index. Il est donc effectif sur toutes les pages ou presque, puisqu'elles sont inclues dans index.php. C'est donc dans l'index qu'est inclu le script qui selon les cas induits une déconnexion. Et là justement, le cas échéant ça foire. Sur les pages avec seulement session_start(), le session_destroy() ne génère aucune erreur. Donc en fait le session_regenerate doit être actif tant qu'il n'y a pas de session_destroy(), puisque les cas de déconnexions surviennent exceptionnellement si la session est volée. |
|
|
00
|
|
|
#5 |
![]() ![]() |
en ce cas, remplace simplement par
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bien vu
![]() Es-tu certain que $_SESSION = array() garanti la même destruction de session que session_destroy ? Je pensais que cela s'utilisait plutot à la place de session_unset et en complément de session_destroy. |
|
|
00
|
|
|
#7 |
![]() ![]() |
en effet, ça remplace littéralement session_unset (qui est dépréciée) cependant, session_destroy ne fait pas grand chose de plus...
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Et n'y aurait-il point un mystère fatal pour la sécurité dans ce "quelque chose de plus..." ?
Autre question pendant que nous y sommes : J'ai laborieusement réussi à trouver cette ligne, censée régénérer les numéros de sessions et effacer les anciens fichiers de sessions : Code :
session_regenerate_id(delete_old_session); Merci pour vos explications. |
|
|
00
|
|
|
#9 |
![]() ![]() |
delete_old_session doit être un booléen (cf la doc), càd true ou false, là c'est une constante que tu as indiquée
les fichiers de sessions ce sont les fichiers dans lequels les variables de sessions sauvegardées cette fonction est à double tranchant : ça change le sid sur chaque page où tu iras... ce qui signifie que à chaque fois que ton visiteur cliquera sur un lien, son sid changera mais si il donne un lien avec son sid et que quelqu'un charge le lien avant lui, alors la session sera volée, et le sid changé, sans possibilité de ratrapper la session... cependant, si le visiteur légitime clique sur un lien du site avant que le lien qu'il a donné ne soit chargé alors le sid qui est dans le lien deviendra invalide...
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
|
|
00
|
|
|
#10 | |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Merci pour ta réponse, Swoög.
Je dois reconnaitre que je n'ai rien compris à ce que tu dis là: Citation:
Mais alors qu'elle est la bonne solution ? Je ne vois pas en quoi j'ai indiqué une constante pour delete_old_session, elle n'a pas de paramètre, elle est passée en paramètre à session_regenerate_id (si je ne me trompe pas dans le vocabulaire). Pour le reste de ton explication, à propos des sid, là j'ai pigé. |
|
|
|
00
|
|
|
#11 | |
![]() ![]() |
le sid c'est le numéro de session, l'identifiant de session tu comprends mieux ce que j'ai mis ?
en PHP, quand tu précise une chaîne qui n'est pas entre quotes comme là, c'est une constante, qui doit être définie avec define, si elle n'est pas définie, PHP considère que c'est la chaîne de caractère... donc dans ce cas, c'est comme si tu faisais Code :
session_regenerate_id('delete_old_session') Citation:
donc pour faire ce que tu veux, ça serait :
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
|
|
|
00
|
|
|
#12 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
As-tu déjà été en haut d'une montagne abrupte, donnant une vue infinie sur des contrées inexplorées, Swoög ?
Cela me fait la même sensation quand tu m'expliques tout ça. Bon je reprend : Citation:
Code :
session_regenerate_id(vive_les_tomates). Citation:
L'argument doit être un bool. Mais un bool de gum ? hu hu...hum désolé. Faisons simple, avant que je n'épluche quelques tutoriels : qu'est ce qu'un bool et surtout en quoi delete_old_session est-elle un bool ? Et combien de bool était possible à la place de delete_old_session ? Et surtout, pourquoi le fait d'indiquer true signifierait-il que l'on a choisi le bool delete_old_session et non pas un autre ? Parce que je ne vois pas en quoi le true va m'effacer mes anciens fichiers de sessions, ici. Il dit juste que session_regenerate_id est true mais session_regenerate_id régénère l'id mais n'efface pas les anciens fichiers de sessions. Oui je sais...
|
||
|
|
00
|
|
|
#13 | |
![]() ![]() |
oula...
alors pour vive les tomates, oui, c'est exactement ça... pour les erreurs, c'est simplement parce que le niveau de report n'est pas assez haut, sinon tu aurais eu une notice te disant que la constante n'existait pas. un bool, c'est l'abréviation (classique en programation) de boolean, booléen en français, c'est un type de variable qui ne peut prendre que deux valeurs : vrai (true) ou faux (false), oui ou non, d'un point de vue numérique : 1 ou 0 Excuse moi de te dire ça... mais vu les remarques que tu as fait, j'ai l'impression que tu n'as JAMAIS fait de programmation là dans la doc tu vois Citation:
mais le nom n'a rien à voir, c'est juste pour pas dire le premier paramètre, ou plutôt le paramètre puisque là y'en a qu'un... donc ce paramètre selon qu'il soit à true ou à false, il a un effet sur la fonction, s'il vaut true, la fonction efface les anciens fichiers de session, s'il vaut false elle ne le faux pas... ça va mieux là ?
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
|
|
|
00
|
|
|
#14 | |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Ah oui là j'ai tout compris, merci !
C'est le fait que le paramètre soit unique qui me permet de comprendre qu'il suffise d'indiquer true ou false. Je pensais qu'il y en avait plusieurs possibles, donc je bloquais... Tiens d'ailleurs, si il y en avait eu plusieurs de possibles, cela se serait présenté comment par exemple ? Citation:
100% sur le tas, mais la pratique sans la théorie, ça va un peu mais ça trouve vite ses limites (la théorie sans la pratique, ça sert à que dalle par contre il me semble). **edit** Honnêtement j'ai vraiment épluché google pour le truc du session session_regenerate_id, mais je n'ai pas trouvé la solution, la preuve. Comme quoi même sur le net, y'a encore des tutos à écrire. A croire que ça se transmet par le bouche à oreille ces trucs là. |
|
|
|
00
|
|
|
#15 | |||
![]() ![]() |
Citation:
en PHP, c'est l'ordre des paramètres, la première valeur est pour le premier paramètre ainsi de suite, c'est pour ça que quand il y a des paramètres optionels il sont toujours à la fin de la liste exemple : Code :
c'est mieux comme ça ?
__________________
Rédacteur "éclectique" (XML, IRC, Web...) Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC) je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque ! pensez à la balise [code] (bouton #) et au tag (en bas)
|
|||
|
|
00
|
|
|
#16 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Ouip, merci Swoög.
C'est des maths tout ça, faudra que je m'y remette un de ces jours... J'espère que je serais mort avant. Encore merci |
|
|
00
|
|
|
#17 |
|
Membre chevronné
![]() |
Histoire de compliquer un peu les choses : ce fameux parametre "delete_old_session" n'est disponible que depuis PHP 5.1. C'est à dire qu'il y a de très grandes chances pour que tu n'ais pas cette option.
Il faudrait donc faire "autrement", mais là ça se complique |
|
|
00
|
|
|
#18 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Je suis ovh, je pense qu'ils sont à jour, non ?
Sans quoi, à défaut de faire un script, ça déclenche une erreur ou quoi ? A priori, soit c'est activé, soit ça déclenche pas d'erreur puisque j'ai fait un echo session_id() et bien l'id change à change page, comme prévu (savoir si ça efface l'ancien fichié, je l'ignore en tout cas pas d'erreur, mais c'est peut être justement parce que 5.01 est activé). |
|
|
00
|
|
|
#19 |
|
Membre chevronné
![]() |
alors, en vrac :
- PHP 5.1 est très peu répandu chez les hebergeurs... le mieux serait que tu vérifies ( fonction phpinfo(); ) - comme déjà constaté dans divers sujets ton PHP n'est pas configuré pour afficher toutes les erreurs... donc forcément, tu en loupes beaucoup - les parametres en trop sont sûrement ignorés - utiliser session_regenerate_id() sans effacer l'ancienne session fait l'effet inverse : cela favorise le vol de session. En effet l'utilisateur peut alors se retrouver avec des dizaines de numéro de session valides, et donc autant de "chances" supplémentaire d'avoir un vol ou conflit de session. |
|
|
00
|
|
|
#20 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bon alors je viens de vérifier dans phpInfo(), tout en haut il y a un jolie PHP Version 4.4.2 Pourquoi ces imbéciles font de la pub avec leur php5 alors ? Dans les spécifications de leurs mutualisés, ils marquent : Langages de script PHP 4 PHP 5 Perl 5 C Python![]() Bon je fais comment alors maintenant ? Je laisse tomber session_regenerate_id, au risque de me faire pirater, ou bien je me lance dans un script pourri donc je ne perçoit même pas le moindre début de commencement de bout de code ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com