session PhP / empecher l'acces a une page par "saut d'URL" - PHP - Programmation
Marsh Posté le 11-06-2002 à 22:06:53
J'ai eu le pb l'aut' jour en asp !
j'ai fait un truc bidon :
En haut de la page, je recupere la valeur d'une variable $secu.
si la valeur est a "oui" j'affiche la page sinon j'affiche "vs n'avez ps le droit..."
pour crecuperer la valeur de $secu, je l'ai mit dans mon fichier d'authentification...
Je sais pas si je me fait comprendre
Le pb, c'est que ca doit etre plug long car tout est coder en php (asp pour mon cas)
Marsh Posté le 11-06-2002 à 22:23:12
jultey a écrit a écrit : Le pb, c'est que ca doit etre plug long car tout est coder en php (asp pour mon cas) |
Plus court tu veux dire
Marsh Posté le 11-06-2002 à 22:49:53
mais y a pas un moyen de faire ca en Php a l'aide de fonction, ou de choses comme ca ?
Si vous avez des exemples, je suis preneur
Marsh Posté le 11-06-2002 à 23:01:28
soit tu utilises les sessions PHP : http://phpinfo.net/?p=articles&rub=sessions
Soit tu bloque ta page via apache et son .htaccess : http://online.fr/support/fr/doc/webperso/htaccess.html
Marsh Posté le 11-06-2002 à 23:44:54
Zion a écrit a écrit : Plus court tu veux dire |
Non, je pensais que
|
etais plus court que
echo "<html>" ; |
C 'est pas le cas ?
Marsh Posté le 12-06-2002 à 00:01:15
Qui te demande de faire un echo de chaque ligne?
Code :
|
C'est pareil pour le PHP, le CFM et l'ASP, ne crois pas que Microsoft a inventé la roue
Marsh Posté le 12-06-2002 à 00:10:18
Zion a écrit a écrit : Qui te demande de faire un echo de chaque ligne?
|
le echo de chaque ligne, c'est justement pour securiser.
genre :
if($secu == "toto" )
{
echo "<html><....>...blabla.</html>" ;
}
else
{
echo "<html>NON AUTOTISE</html>" ;
}
si la pesonne vient directement a l'url sans avoir la valeur de $secu elle pourra pas voir la page.
D'ou l'interet de tout mettre en echo je pense
Marsh Posté le 12-06-2002 à 00:25:51
jultey a écrit a écrit : le echo de chaque ligne, c'est justement pour securiser. genre : if($secu == "toto" ) { echo "<html><....>...blabla.</html>" ; } else { echo "<html>NON AUTOTISE</html>" ; } si la pesonne vient directement a l'url sans avoir la valeur de $secu elle pourra pas voir la page. D'ou l'interet de tout mettre en echo je pense |
ou plus simple
Code :
|
Marsh Posté le 12-06-2002 à 00:30:38
J-'-R a écrit a écrit : ou plus simple |
Ouai, mais j'aime pas trop comme ca, je touve que c'est moins lisible. Mais c'est peut etre plus rapide...
Marsh Posté le 12-06-2002 à 01:04:41
la solution que vous proposez n'a rien de "securisez" qq. qui a un minimun de connaissance detourne la protection en faisant le changement directement ds l'url surtout si tu appelles la variable secu
Marsh Posté le 12-06-2002 à 01:15:39
Stligar a écrit a écrit : la solution que vous proposez n'a rien de "securisez" qq. qui a un minimun de connaissance detourne la protection en faisant le changement directement ds l'url surtout si tu appelles la variable secu |
mais comment tu fais pour savoir la valeur de secu ?
fichier avec les 2 champs d'identification
-> envoie vers le fichier authentification.php qui n'affiche rien a l'ecran et qui se contente si le l'authentification est bonne de rajouter a l'url par GET ?secu=toto et de diriger vers les pages securisées.
Tu ne pourras donc pas voir la valur de $secu si tu n'a pas une authentification valide !
-> si tu vas direct a une page securisée tu a besoin de la valeur de $secu... mais hoooo, on ne l'a que si on s'est authentifié par le fichier authentification .php !
Je pense que c'est vraiment une page sécurisée !
Je l'ai fait sur un site, et si tu arrive a trouvé la valeur de ma variable de sécurité, c'est que t'as raison... mais sinon...
Marsh Posté le 12-06-2002 à 01:24:17
Ok en fait c'est à moitie securise ds la mesure ou si la personne connait l'url de la page "securise" il ya de forte chance que cette personne possede l'url complete dc la variable secu avec
Marsh Posté le 12-06-2002 à 01:25:35
Stligar a écrit a écrit : Ok en fait c'est à moitie securise ds la mesure ou si la personne connait l'url de la page "securise" il ya de forte chance que cette personne possede l'url complete dc la variable secu avec |
c vrai
Marsh Posté le 12-06-2002 à 02:19:09
euh...
www-authenticate, zoupla, clique sur recherche
Marsh Posté le 12-06-2002 à 02:23:21
avec les sessions C tellement simple et rapide...
Tu start une session et tu verifie si elle existe dans la page suivante .... 3 min
Marsh Posté le 12-06-2002 à 02:58:51
Et tu pourrais m'expliker comment on fait ca ? Demarrer une session et verifier si elle existe dans la page suivante ?
merci
Marsh Posté le 12-06-2002 à 09:40:58
Tout d'abord, je te conseille d'aller faire un tour sur //www.phpinfo.net/?p=articles&rub=sessions. Tu y apprendras ce qu'il faut savoir sur les sessions.
J'avais à faire exactement la même chose que toi, j'ai procédé de la façon suivante :
1) Tu crée une session avec "session_start()" et dès que ton visiteur a été authentifié, tu crée une variable de session grâce à session_register("variable" ).
2) en début de chaque page de ton site, tu vérifie si la variable existe de la façon suivante :
session_start(); //création ou reprise d'une session
/* si la session ne comporte pas de variable "variable", redirection sur la page d'identification */
if (!session_is_registered("variable" ))
{
session_destroy() or die("Erreur : impossible de détruire la session" ); //destruction de la session
header("Location: ".$racine."index.php" ); //redirection
}
Note que le "session_is_registered" est bien mieux qu'un simple "if ($variable==valeur)", puisqu'il n'est pas possible de le tromper en passant la valeur de la variable dans l'url.
N'oublie pas de mettre session_start en haut de chaque page, sinon la session sera perdue.
Comme tu peux le lire à l'adresse que je t'ai indiqué, la transmission d'une session dépend de plusieurs facteurs, moi je me suis basé sur la transmission automatique grâce à session.use_trans_sid=1, mais ça pose tout de même des problèmes si les cookies sont désactivés, je ne sais pas encore de quoi ça vient.
Qui qu'il en soit, de cette manière le site est relativement bien sécurisé, je connais bien une faille liée au problème précédent mais il faut la trouver.
Si quelque chose ne te paraît pas clair, n'hésite pas à demander.
Marsh Posté le 12-06-2002 à 09:42:32
Stligar a écrit a écrit : Ok en fait c'est à moitie securise ds la mesure ou si la personne connait l'url de la page "securise" il ya de forte chance que cette personne possede l'url complete dc la variable secu avec |
non en passant un form method post et une varraible semi aleatoire qui change selon l heure...
bon, , ok je vais loin
Marsh Posté le 12-06-2002 à 09:45:15
Jeffres a écrit a écrit : Tout d'abord, je te conseille d'aller faire un tour sur //www.phpinfo.net/?p=articles&rub=sessions. Tu y apprendras ce qu'il faut savoir sur les sessions. J'avais à faire exactement la même chose que toi, j'ai procédé de la façon suivante : 1) Tu crée une session avec "session_start()" et dès que ton visiteur a été authentifié, tu crée une variable de session grâce à session_register("variable" ). 2) en début de chaque page de ton site, tu vérifie si la variable existe de la façon suivante : session_start(); //création ou reprise d'une session /* si la session ne comporte pas de variable "variable", redirection sur la page d'identification */ if (!session_is_registered("variable" )) { session_destroy() or die("Erreur : impossible de détruire la session" ); //destruction de la session header("Location: ".$racine."index.php" ); //redirection } Note que le "session_is_registered" est bien mieux qu'un simple "if ($variable==valeur)", puisqu'il n'est pas possible de le tromper en passant la valeur de la variable dans l'url. N'oublie pas de mettre session_start en haut de chaque page, sinon la session sera perdue. Comme tu peux le lire à l'adresse que je t'ai indiqué, la transmission d'une session dépend de plusieurs facteurs, moi je me suis basé sur la transmission automatique grâce à session.use_trans_sid=1, mais ça pose tout de même des problèmes si les cookies sont désactivés, je ne sais pas encore de quoi ça vient. Qui qu'il en soit, de cette manière le site est relativement bien sécurisé, je connais bien une faille liée au problème précédent mais il faut la trouver. Si quelque chose ne te paraît pas clair, n'hésite pas à demander. |
C'est bien expliqué ! Ca a l'air simple en fait, je vais l'utiler maintenant !
Marsh Posté le 12-06-2002 à 10:02:08
Jeffres a écrit a écrit : |
Heuuu, pourrait tu m'expliquer ce truc la ??
On peut décider de passer à chaque fois l'id de session dans l'URL. C'est une solution qui fonctionne à tous les coups même si elle est lourde et peu élégante.
Les URL seront alors de la forme : "index.php?".session_name()."=".session_id() ou index.php?<? echo session_name();?>=<? echo session_id(); ?> ou autres variantes du même genre
Marsh Posté le 12-06-2002 à 10:33:10
session_name() renvoie le nom de la session, session_id() renvoie son identifiant.
Le fait de passer session_name()=session_id() dans l'url permet de conserver la session d'une page à l'autre.
Si ce sont les notations qui te posent problème, elles dépendent de ce que tu sois au sein d'une balise PHP ou non.
Ainsi, si ton url se trouve entre les balises <?php et ?>, il faut utiliser la concaténation (le "." ) pour construire l'url : "index.php?".session_name= équivaut à "index.php?PHPSESSID=" si session_name() renvoie "PHPSESSID".
Si l'url se trouve dans du code HTML, il faut passer en PHP pour récupérer le nom et l'idendifiant de la session, c'est pourquoi on écrit index.php?<? echo session_name();?>= qui équivaut à exactement la même chaine que précédement, echo session_name() écrivant "PHPSESSID".
Ca répond à tes interrogations ? T'avais peut-être déjà compris tout ça mais je ne voyais qu'est-ce qui pouvait te poser problème à part ça.
Marsh Posté le 12-06-2002 à 10:38:03
Non, en fait, je me suis mal exprimé. J'avais compris qu'on passait les infos via l'URL .
C'est par la méthod GET si je n'm'abuse.
En fait, ca me choque qu'on passe le nom de session et l'id de session en clair... Ca pose pas de pb au niveau de sécurité ?
2eme interogation : Est-ce qu'on peut en meme temps passe un formulaire en POST ou en GET
Marsh Posté le 12-06-2002 à 10:45:38
Passer les infos via l'URL signifie les transmettre pas le lien, cela se fait en rajoutant tout simplement un point d'interrogation à la fin du lien du style :
lien?variable1=valeur1&&variable2=valeur2
Ensuite tu récupère les valeurs dans les variables $variable1 et $variable2 dans la page suivante. Mais attention, elles ne durent que sur une page, il faut les retransmettre dans l'url suivant ou les stocker par des cookies pour qu'elle persistent.
J'ai répondu à ta question cette fois ?
Pour ce qui est de GET et POST, je ne peux pas te répondre, je n'ai jamais utilisé GET.
Marsh Posté le 12-06-2002 à 10:55:33
Jeffres a écrit a écrit : J'ai répondu à ta question cette fois ? |
Mmmm , je crois pas, ce que je voulais dire que n'importe qui peut voir le nom de la session et l'id dans le lien...
Si une personne se connecte, les infos passent par l'url... Si quelqu'un d'autre voit ce lien ( en passant a coté de l'odri par exemple ) et se connecte juste apres en passant les meme parametres... Ca fait quoi ? Ca marche ?
Marsh Posté le 12-06-2002 à 11:00:08
Je ne pense pas que ce soit possible, il n'y a pas de moyen à ma connaissance pour affecter soit-même une id à une session.
De toute façon, celles-ci ne sont pas permanentes, et une id différente est générée à chaque fois.
A noter que la transmission explicite fait exactement la même chose et que le nom et l'id apparaissent de toute façon, même si chez moi elle doit se louper à un moment et qu'elle se repose sur les cookies. Ce que je ne comprends toutjours pas d'ailleurs.
Marsh Posté le 12-06-2002 à 11:05:42
Jeffres a écrit a écrit : Je ne pense pas que ce soit possible, il n'y a pas de moyen à ma connaissance pour affecter soit-même une id à une session. De toute façon, celles-ci ne sont pas permanentes, et une id différente est générée à chaque fois. A noter que la transmission explicite fait exactement la même chose et que le nom et l'id apparaissent de toute façon, même si chez moi elle doit se louper à un moment et qu'elle se repose sur les cookies. Ce que je ne comprends toutjours pas d'ailleurs. |
Ok, merci, je testerai ca chez moi ce week end...
Marsh Posté le 12-06-2002 à 14:56:49
Bon, tout d'abord merci poour votre aide, je vois que beaucoup de gens se sont mobilisé, c'est sympa.
D'apres vos conseils et ce que j'ai pu trouver sur internet, j'ai récupéré un script verif.php
Protéger une page (verif.php)
<?
session_start();
/*
si session_is_registred() renvoie false cela siginifie que le visiteur
n'a pas de session d'ouvert, il n'est donc pas loggué ni autorisé à
acceder à l'espace membres
*/
if(!session_is_registered('login')
{
echo 'Vous n\'êtes pas autoriser a acceder a cette zone';
include('login.htm';
exit;
}
?>
Est ce que ca vous parrait bien.
Si non comment l'améliorer.
Marsh Posté le 12-06-2002 à 15:01:03
peemousse a écrit a écrit : Bon, tout d'abord merci poour votre aide, je vois que beaucoup de gens se sont mobilisé, c'est sympa. D'apres vos conseils et ce que j'ai pu trouver sur internet, j'ai récupéré un script verif.php Protéger une page (verif.php) <? session_start(); /* si session_is_registred() renvoie false cela siginifie que le visiteur n'a pas de session d'ouvert, il n'est donc pas loggué ni autorisé à acceder à l'espace membres */ if(!session_is_registered('login') { echo 'Vous n\'êtes pas autoriser a acceder a cette zone'; include('login.htm'; exit; } ?> Est ce que ca vous parrait bien. Si non comment l'améliorer. |
Heuu, il me semble que Jeffres a deja poster ca... si tu l'as cherché sur internet....
Marsh Posté le 12-06-2002 à 15:05:47
Je suis vraimment unr crotte !! ...
Le pire c'est que je l'ai vu le srcipt de Jeffres, mais j'ai pas fait le rapprochement tout de suite...
Toute ma Confuse ..
Merci en tout cas les pages sont un minimums protégées...
Donc si vous avez des améliorations à apporter , je suis dans le coin
Marsh Posté le 12-06-2002 à 15:06:19
Faut avouer, ça ressemble quand même beaucoup à ce que j'ai dit.
Inutile donc de préciser que ça m'a l'air très bien, d'autant plus que c'est testé et approuvé.
Marsh Posté le 12-06-2002 à 15:08:31
Bah je vais donc avoir l'honneur de clore le sujet, en vous remerciant tous pour votre aide et votre participation à ce Topic
Merci beaucoup et gros bisous
Marsh Posté le 12-06-2002 à 15:10:17
peemousse a écrit a écrit : Bah je vais donc avoir l'honneur de clore le sujet, en vous remerciant tous pour votre aide et votre participation à ce Topic Merci beaucoup et gros bisous |
Loupé, c'est moi
Marsh Posté le 12-06-2002 à 15:18:07
Jeffres a écrit a écrit : Non, c'est moi ! |
d'accord, si tu veux
Marsh Posté le 12-06-2002 à 15:20:06
Tu m'auras pas comme ça ! J'ai dit que ce serait moi, alors ce sera moi !
Marsh Posté le 12-06-2002 à 15:21:14
Jeffres a écrit a écrit : Tu m'auras pas comme ça ! J'ai dit que ce serait moi, alors ce sera moi ! |
serais, il faut un "s"
Marsh Posté le 12-06-2002 à 15:26:10
jultey a écrit a écrit : serais, il faut un "s" |
Trop con, non, il faut un T !!
Marsh Posté le 12-06-2002 à 15:26:16
Hum, pas sûr...
Je parlais pour le "s" bien sûr, je suis d'avis qu'il faut un "t".
Marsh Posté le 11-06-2002 à 21:05:27
mon probleme est lorsque une personne connait le nom de la page apres le login cette personne peut acceder a la suite du site sans passer par le login.
Comment eviter ce problème ? Il me semble que les sessions peuvent permettre de sécuriser ces pages ..
Si oui ? comment ?