Page 1 sur 2
Securité Pseudo Password
Posté : 14 juin 2005, 20:34
par sadced13
Bonjour tous le monde,
Je suis en train de faire un site ou j'ai besoin d'une identification par pseudo et mots de passe.
j'ai créer ma base de donné, mon formulaire html, et ma verification en php.
ce qui ressemble à ça :
Pour le formulaire.html
Code : Tout sélectionner
<form action="verification.php" method="POST">
<input type="text" name="pseudo">
<input type="password" name="password">
</form>
Pour le verification.php
Code : Tout sélectionner
$pseudo=$_POST['pseudo'];
$password=$_POST['password'];
// Connexion a la base de donnée
...
// Ecriture de quelques renseignements sur l'utilisateur
Le problème que je rencontre c'est que dans la barre des adresse j'ai verification.php?pseudo=pseudo&&password=password
Donc n'importe quel personne regardant l'historique peut facilement recuperer le mots de passe et le pseudo.
Il me semblait pourtant que la methode POST empeché cela...
Posté : 14 juin 2005, 20:51
par ouckileou
effectivement il doit y avoir une coquille quelque part car avec la méthode POST les variables ne sont pas visibles dans l'url
poste un peu plus de code si tu veux qu'on cherche avec toi, car avec ce que tu donnes ici tu ne devrais pas avoir ce problème
Posté : 14 juin 2005, 21:42
par sadced13
Voici les codes complets de mes deux pages
formulaire.html
Code : Tout sélectionner
<html>
<head>
</head>
<body>
<?php
include("menu_head.html"); // Feuille de style du menu
echo'BODY {background-image: url("../images/fond.jpg")} '; // image de fond
include("menu_body.html"); // menu
?>
<form name="log" action="autentification.php" method="post">
<table>
<tr>
<td>Pseudo : </td>
<td><input type="text" name="pseudo" size="40" maxlength="256"></td>
</tr>
<tr>
<td>Password :</td>
<td><input type="password" name="password" size="40" maxlength="256"></td>
</tr>
</table>
<input type="submit" value="Valider"></center>
</form>
</body>
</html>
pour le fichier autentification.php
Code : Tout sélectionner
<?php
include("../menu_head.html");
echo'BODY {background-image: url("../images/fond.jpeg")} ';
include("../menu_body.html");
$pseudo=$_POST['pseudo'];
$password=$_POST['password'];
if ($pseudo!=''")
{
$liendb=mysql_connect( "localhost","root");
mysql_select_db("produit",$liendb);
$query = "SELECT * FROM pseudo WHERE pseudo='$pseudo'";
$resultat = mysql_query($query,$liendb);
$ligne=mysql_fetch_array($resultat);
if ($password==$ligne['password'])
{
echo 'Bienvenue M.'.$ligne['Nom'].' '.$ligne['Prénom'];
echo'<a href="menu_menbre0.php">Veuillez cliquer ici pour acceder au menu</a>';
}
else echo 'mauvais password ';
}
else echo "Veuillez entrer votre pseudo";
?>
Posté : 14 juin 2005, 21:54
par Cyrano
À première vue, ton formulaire est correct et je ne vois pas pourquoi les valeurs du formulaire passeraient par l'url, vérifie que tu affiches bien le bon fichier dans ton navigateur. Juste un détail, il manque une balise d'ouverture <center> juste avant le bouton submit.
En revanche, tu risques fort d'avoir des surprises avec le fichier de traitement, voici une proposition de correction:
<?php
include("../menu_head.html");
echo"BODY {background-image: url(\"../images/fond.jpeg\")} ";
include("../menu_body.html");
$pseudo = isset($_POST['pseudo'])?$_POST['pseudo']:"";
$password = isset($_POST['password'])?$_POST['password']:"";
if ($pseudo != "")
{
$liendb = mysql_connect( "localhost","root");
mysql_select_db("produit",$liendb);
$query = "SELECT * FROM pseudo WHERE pseudo='". $pseudo ."'";
$resultat = mysql_query($query,$liendb);
$ligne = mysql_fetch_array($resultat);
if ($password == $ligne['password'])
{
echo "Bienvenue ".$ligne['Prénom']." ".$ligne['Nom'];
echo"<a href=\"menu_menbre0.php\">Veuillez cliquer ici pour acceder au menu</a>";
}
else
{
echo "mauvais password ";
}
}
else
{
echo "Veuillez entrer votre pseudo";
}
?>
Posté : 14 juin 2005, 22:08
par sadced13
Pour information :
Quel est la difference entre
- $pseudo=$_POST['pseudo']
et
- $pseudo = isset($_POST['pseudo'])?$_POST['pseudo']:"";
Si l'explication n'est pas facile, pas besoin de te casser la tête je ferais une recherche sur de la documentation ....
En tout cas Merci pour ton aide.
Posté : 14 juin 2005, 22:21
par Cyrano
Ce que j'ai mis va t'éviter une notice ou un warning sirla valeur $_POST est vide, donc j'initialise la valeur $pseudo par exemple soit avec $_POST['pseudo'] si elle existe soit une chaine vide;
La formulation:
$pseudo = isset($_POST['pseudo'])?$_POST['pseudo']:"";
Est complètement équivalente à:
if(isset($_POST['pseudo']))
{
$pseudo = $_POST['pseudo'];
}
else
{
$pseudo = "";
}
Un peu plus long

Posté : 14 juin 2005, 22:56
par smarties
Exactement ? est l'operateur ternaire, il fonctionne comme ca :
Posté : 14 juin 2005, 23:33
par albat
if (isset($_POST['pseudo']))
$pseudo = $_POST['pseudo'];
else
$pseudo = "";
Tu me l'enlèves de la bouche !
Ce devrait être à moi d'expliquer ça.
Après tout, c'est moi le spécialiste de cet opérateur !
C'est vrai, quoi ! Pour une fois que je maîtrise un truc... 
Posté : 15 juin 2005, 07:58
par Cyrano
Ce devrait être à moi d'expliquer ça.
Après tout, c'est moi le spécialiste de cet opérateur !
C'est vrai, quoi ! Pour une fois que je maîtrise un truc... 
Fallait pas me le montrer

Posté : 15 juin 2005, 09:38
par pjl
Et puisque l'on parle de sécurité; 2 points importants :
- vérifier les variables issues du formulaire avant de les utiliser ;
- crypter les mots de passe stockés dans la base de données.
Posté : 16 juin 2005, 00:33
par sadced13
Re ...
crypter les mots de passe stockés dans la base de données.
Comment crypte t'on les mots de passes dans la base de donnés ?
Posté : 16 juin 2005, 00:39
par Cyrano
Tu peux utiliser un hachage avec
md5() ou
sha1()
Attention cependant, le hachage est irréversible, ça veut dire qu'in internaute qui a perdu son mot de passe ne pourra pas le récupérer parce qu'on ne peut pas faire l'opération inverse.
Posté : 19 avr. 2006, 10:33
par nabs
slt a tous,
je remet ce sujet a jour car j'y travaille en ce moment, et j'ai une question cocernant ce cryptage de mdp sur la bdd, comment peut on faire de controles d'autentifications si le mdp est crypté sur la bdd ? ce que je comprend dans ca c'est que le mot de passe est crypté dans la base meme, donc illisible, et donc pas moyen de faire de tests dessus. mais je suis sure ke j'ai compri le truc de travers, donc j'aimerai bien y voir un peu plus clair svp.
Posté : 19 avr. 2006, 10:42
par Ryle
ce que je comprend dans ca c'est que le mot de passe est crypté dans la base meme, donc illisible, et donc pas moyen de faire de tests dessus. mais je suis sure ke j'ai compri le truc de travers, donc j'aimerai bien y voir un peu plus clair svp.
Il te suffit simplement de crypter le mot de passe saisie par l'utilisateur et de vérifier que le résultat est le même que celui que tu as en base

Posté : 19 avr. 2006, 10:48
par nabs
dans ce cas le mdp n'est pas crypté dans la bdd, mais c uniquement le mdp saisi qui est crypté.
Tu peux utiliser un hachage avec md5() ou sha1()
Attention cependant, le hachage est irréversible, ça veut dire qu'in internaute qui a perdu son mot de passe ne pourra pas le récupérer parce qu'on ne peut pas faire l'opération inverse.
c quoi ce hachage qui empeche de récuperer le mdp sur la base ? et pourquoi crypter un mdp dans la base ?