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 26/09/2006, 14h05   #1
Inactif
 
Inscription : janvier 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 97
Points : 61
Points : 61
Par défaut [Sécurité] login et message d'erreur

Bonjour à tous,

J'ai repris une FAQ disponible sur ce site concernant l'utilisation des sessions dans un contexte d'authentification avec mot de passe.

Le fichier principal est login.php, qui comprend une FORM avec deux champs (login et mot de passe) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<FORM id='log' ACTION="auth.php3" method="POST" onSubmit='javascript:submit_pass();'>
<TABLE CELLSPACING="0" BORDER="0">
<TR>
<TD WIDTH=20% ALIGN="LEFT" CLASS=ver012>
Adresse e-mail : \n";
</TD>
<TD ALIGN="CENTER" CLASS=ver012>
<INPUT TYPE="text" CLASS="ver012" NAME='login'>
</TD>
</TR>
<TR>
<TD WIDTH=20% ALIGN="LEFT" CLASS=ver012>
Code secret associ&eacute; : \n";
</TD>
<TD ALIGN="CENTER" CLASS=ver012>
<INPUT TYPE="password" CLASS="ver012" NAME='passwd'>
</TD>
</TR>
</TABLE>
<INPUT type="submit" VALUE="Soumettre ces informations">
</FORM>
J'ai aussi un auth.php3 qui fait des tests, qui appelle le fichier login original si il y a une erreur et qui affiche une page protégée si succès.

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
<?php
 
session_start();
 
if (($_POST['md5']!='') && ($_POST['login']!=''))
{
  $gd="\"";
  $sg="'";
  $login=$_POST['login'];
  $md5=$_POST['md5'];
  $host='localhost';
  $link = mysql_connect($host,"toto","toto"); 
  $ret = mysql_select_db("toto",$link);
  $query = "SELECT PHOTO_NOM, PHOTO_PATH, CODE_RECH FROM PHOTO_PERS WHERE LOGIN_RECH=".$gd.$login.$gd." AND PHOTO_ACTIVE='Y' ORDER BY NUM_ENREG";
  $result = mysql_query($query);
  if (mysql_num_rows($result) > 0) 
  {  
    $data = mysql_fetch_assoc($result);
    $password=$data['CODE_RECH'];
    if ($md5==md5($password))
    {
      $_SESSION['last_access']=time();
      $_SESSION['ipaddr']=$_SERVER['REMOTE_ADDR'];
      $_SESSION['user']=$login;
      header("Location: ./frmphprs_new.php3");
      die();
    }
    else
    {
      header("Location:./loginphprs.php3");
      die();
    }
  }
  else
  { 
    //echo "Rien trouve dans la base...<br>\n";
    header("Location: ./loginphprs.php3");
    die();
  }
}
else
{
  header("Location: ./loginphprs.php3");
  die();
}
//echo "</BODY>\n";
//echo "</HTML>\n";
?>
Le problème, c'est que je voudrais envoyer un code d'erreur au fichier loginphprs.php3 suivant les différents cas. Ce code d'erreur serait affiché dans cette page originale.

Dois-je ajouter une info de session ? Dois-je créer une forme dans auth.php3 ? Dois-je implémenter un cookie ?

Bref, là, je suis sec...

Merci d'avance de vos conseils.

Cordialement,

Philippe.
the_clansman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 14h31   #2
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Salut

Ton fichier d'identification, c'est login.php, ou loginphprs.php ?

Enfin bref, dans tes header, tu fais passer une variable selon le type d'erreur :

Exemple :

Code :
1
2
 
header("Location:./loginphprs.php3?erreur=type_1");
Et dans le fichier qui contient le formulaire :

Code :
1
2
3
 
if ( (isset($_GET['erreur'])) && ($_GET['erreur'] == "type_1") ) {
include(‘fichier_erreur_1.php’);}
ou :

Code :
1
2
3
 
if ( (isset($_GET['erreur'])) && ($_GET['erreur'] == "type_1") ) {
print("Vous n'êtes pas autorisés à accéder dans mon shop");}
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 14h40   #3
Inactif
 
Inscription : janvier 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 97
Points : 61
Points : 61
Par défaut Mais c'est bien sûr !

Merci beaucoup !

Ca fait tellement longtemps que je m'efforce à faire passer les infos en POST, que j'ai oublié que le GET existait !

Je suis confus et merci beaucoup !

En fait login.php et loginphprs.php, c'est pareil : je voulais expliquer de la manière la plus simple possible mon problème

Bon ben j'utilise le get alors

Merci beaucoup encore et bonne journée !

Et hop, un post résolu (...quand je disais qu'il y avait que ça de vrai le post ).
the_clansman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 12h10   #4
Inactif
 
Inscription : janvier 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 97
Points : 61
Points : 61
Par défaut Et en post

Une toute chtite question :

Je remarque que le passage de variable est visible dans l'url (ben ouais, c'est normal, c'est un passage en Get ).

Cependant, j'aimerais que l'url de retour au module loginphprs.php3 ne soit pas visible, et donc, j'aimerais pouvoir passer une varialble en post.

Voici ma question :

Y'a-t-il moyen de passer une variable en post juste avant l'appel à la fonction header pour que la fonction appelée par header puisse récupérer le contenu de la dite variable ?

En bref, comment passer le contenu de l'argument de la méthode GET -> POST ?

D'avance, je vous remercie grandement des réponses que vous pourrez m'apporter et vous remercie d'ores et déjà pour l'aide fournie.

Cordialement,

Philippe.
the_clansman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 12h23   #5
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Question :

Comment se nomme ta page principale ?

Exemple : accueil.php, index.php ?

[EDIT]... elle a son intérêt.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 13h46   #6
Inactif
 
Inscription : janvier 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 97
Points : 61
Points : 61
Par défaut Page principale...

Ma page principale s'appelle index.html...

Peux tu m'en dire plus, car, pour l'instant, je ne vois pas le rapport

Veux tu dire par là que je dois changer ma page principale pour ajouter une configuration me permettant de passer des paramètres POST par l'intermédiaire de la fonction header du PHP ?

Sinon, pour ne pas voir le passage de variable par GET, je pourrais éventuellement créer une page fantome avec un frame 100% à l'intérieur... Ceci dit, il me semble que ce genre de fantaisies n'est que modérément apprécié par le référencement GOOGLE : en effet, cet artefact est communément utilisé pour soumettre des mots clés ne reflétant pas exactement le contenu d'un site

L'idéal serait donc bien de passer mon argument en POST pour que la fonction appelée par le header puisse récupérer l'info

Merci de tes réponses.

Cordialement,

Philippe.
the_clansman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 14h49   #7
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
C'est vrai, c'est une solution que d'utiliser un framset, de façon à masquer toutes les variables passées en get dans l'url, exemple :

Code :
1
2
3
4
5
 
 
<FRAMESET rows="100%,*"border=0 frameborder=0 framespacing=0>
    <FRAME SRC="index.php" MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=auto noresize>
</FRAMESET>
D'un point de vue utilisation (application intra-extranet), c'est plutôt confortable mais par rapport aux référencement, je reconnais que celà peut poser probléme... et même assuremment.

Et enfin, si la method Get a les inconvénients cités, la method Post aussi car elle implique une validation du formulaire, même si les variables sont passées en hidden.

La method Get répond cependant parfaitement en cas d'une redirection par header + variables.

Si effectivement, celà pose un probléme naturel de sécurité, il reste la solution d'implémenter un systéme de gestion de session.
Au bout du compte, ce n'est pas si compliqué.

Je crois qu'on a fait le tour des différentes possibilités ?

[EDIT] Il y a un truc quand même : je mélange pas les extentions html & php), soit ils sont tous en html, soit tous en php selon l'utilisation.
Celà évite les mauvaises surprises.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 15h11   #8
Inactif
 
Inscription : janvier 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 97
Points : 61
Points : 61
Par défaut Infos

Citation:
Si effectivement, celà pose un probléme naturel de sécurité, il reste la solution d'implémenter un systéme de gestion de session.
Au bout du compte, ce n'est pas si compliqué.
Qu'appelles-tu "système de gestion de session" ? C'est pas ce que je fais actuellement ? Veux tu dire que je peux déclarer une variable de session 'erreur' pour me retourner le code d'erreur adéquat entre ma page loginphprs et ma page auth.php3 ?

Autrement dit une affectation de type :
Code :
$_SESSION['erreur']="type_erreur1";
Avec, du coup, un traitement sur $_SESSION['erreur'] dans ma page de login au lieu de faire un traitement sur la variable GET... C'était à ça que tu pensais ?

Moi, ça me semble pas mal : tu vois des inconvénients à utiliser cette méthode (sécurité/bugs/etc.) ?

Merci de ton aide

Philippe.
the_clansman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 15h24   #9
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par the_clansman
Qu'appelles-tu "système de gestion de session" ? C'est pas ce que je fais actuellement ? Veux tu dire que je peux déclarer une variable de session 'erreur' pour me retourner le code d'erreur adéquat entre ma page loginphprs et ma page auth.php3 ?

Autrement dit une affectation de type :
Code :
$_SESSION['erreur']="type_erreur1";
Avec, du coup, un traitement sur $_SESSION['erreur'] dans ma page de login au lieu de faire un traitement sur la variable GET... C'était à ça que tu pensais ?

Moi, ça me semble pas mal : tu vois des inconvénients à utiliser cette méthode (sécurité/bugs/etc.) ?

Merci de ton aide

Philippe.
Oui bien sur, c'est ce dont je pensais:

Les sessions
Perso, je n'y vois aucun inconvénient, bien au contraire, j'essaye de le mettre en application chaque fois que c'est nécessaire, et ça rend de grands services.

Tu fais ce que tu veux avec un tel "système".

Mais remarque mon précédent [edit]
Celà se justifie car tu seras obligé de migrer tes pages vers l'extention php, au lieu de html, et toutes les contraintes que celà implique, les liens, etc...
Mauvaise définition de départ.
Pourquoi ? because tu ne peux pas mettre en début d'une page html un session_start();
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 16h17   #10
Inactif
 
Inscription : janvier 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 97
Points : 61
Points : 61
Par défaut Petite précision...

Ok, j'ai compris : je vais donc essayer de définir l'erreur et l'envoyer par le $_SESSION_ID...

Mais y'a juste un truc que j'ai pas capté : en quoi le fait que je sois en index.html est bloquant vu que je ne me sers pas des sessions dans cette page ? Tu veux dire que si je passe par cette page, toutes les infos de sessions seront effacées ? (le tableau $_SESSION en particulier ?)

Sinon, je comprends pas : mon index.html est un ensemble de lien vers ma page de protégée : si une session est ouverte, la page protégée s'affiche avec le contenu protégé, sinon, la page de login est affichée par l'intermédiaire du header qui va bien...

En fait, je vois pas ce que index.html va faire la dedans : il intervient à quel moment ?

[EDIT] A moins que tu ais voulu parler de ton message de référence avec la frame 100% Dans ce cas, pas de problème : je n'utilise plus cette méthode à cause des problèmes GOOGLE. Ca apporte en effet plus de problèmes que ça en résoud et je tiens à mon référencement GOOGLE
Pour info, tu peux taper 'photos basket sous Google, mon site est le 4e listé (sans compter le lien payant ). [/EDIT]
Merci encore

Philippe.
the_clansman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 16h43   #11
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Disons que c’est une « règle » que je me suis fixée.
Si j’ai une application qui comprend 10 fichiers et que la moitié sont des scripts php, je ferai en sorte qu’ils soient tous à l’extension php.
Cela ne gêne en rien le balisage html, il n’y a que l’extension qui change.
Mais si je souhaite plus tard reconsidérer l’application ( ou un site), je ne me poserai pas la question sur la compatibilité.
Exemple :
Pour un include ( ben oui, tu ne peux pas faire d’include dans un fichier à l'extension html.
Rajouter une gestion de sessions ? et bien non plus.

Qu’est-ce que ça change d’avoir que des fichiers php ? rien du tout, même pas au niveau des moteurs ou du référencement, si ce n’est que tu ne te poses plus de questions le jour où tu dois revoir tes structures.

Ensuite, tes variables de session sont sujettes à se balader d'une page à l'autre pour l'exploitation.
Tu ne pourras mettre un session_start uniquement sur les pages php.
Si tu dois récupérer/ ou utiliser une de ces variables dans une page html, t'es dans les choux.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 21h00   #12
Inactif
 
Inscription : janvier 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 97
Points : 61
Points : 61
Par défaut Ok merci...

Ok, je vois mieux à présent...

Ben tout est très clair et je te remercie grandement pour ce support : je te souhaite une bonne continuation.

Merci pour tout.

Cordialement,

Philippe.
the_clansman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h20.


 
 
 
 
Partenaires

Hébergement Web