Votre avis sur mon systéme de session

Bonjour,

Je vais maitre un petit système de session sur mon site et j'aimerais avoir votre avis sur le le code concernent l'efficacité et aussi la sécurité.

index.php

<html>
<body>
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("compt3");
if (isset($_COOKIE['supercookie2']))
{
$login= mysql_real_escape_string(htmlspecialchars($_COOKIE['supercookie2']));
$reponse = mysql_query("SELECT * FROM t_compt_2 WHERE login='$login'");
$donnees = mysql_fetch_array($reponse);
if ($donnees['statut'] == '1'){
echo '<a>Bonjour </a>';
echo $donnees['pesdo'];
echo '</br><a href ="deco.php">Déconnection</a>';}
else{

echo '<a>Bonjour, vous n\'ete pas connecter ! </a><br/><br/>';
echo '</br><a href ="login.php">Connection</a>';}
}
else{
echo '<a>Bonjour, vous n\'ete pas connecter ! </a><br/><br/>';
echo '</br><a href ="login.php">Connection</a>';
}
?>
</body>
</html>

login.php

<html>
<head>
</head>
<body>
<FORM method="POST" action="actionlog.php">

<P>Login<br>
<input type="text" name="login" value="" size="100" id="login"/>
<br>
</p>
<P>Mot de passe<br>
<input type="password" name="mdp" value="" size="100" MAXLENGTH="8" id="mdp"/>
</p>
<INPUT type="submit" value="Envoyer"/>
</FORM>
</TH>
</body>
</html>

actionlog.php

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("compt3");
$login= mysql_real_escape_string(htmlspecialchars($_POST['login']));
$reponse = mysql_query("SELECT * FROM t_compt_2 WHERE login='$login'");
$donnees = mysql_fetch_array($reponse);
if ($donnees['login'] == $login)
{
echo 'Login OK !<br/><br/> ';
$mdp= mysql_real_escape_string(htmlspecialchars($_POST['mdp']));
if ($donnees['mdp'] == $mdp)
{
echo 'Mot de passe OK !';
mysql_query("UPDATE t_compt_2 set statut='1' WHERE login='$login'");
setCookie("supercookie1",$donnees['pesdo']);
setCookie("supercookie2",$donnees['login']);
header("Refresh: 1; URL=./index.php");
}
else{
echo 'Mot de passe erroné !';
}
}
else
{
echo 'Login ou mot de passe erroné !';
}
?>

deco.php

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("compt3");
$login= mysql_real_escape_string(htmlspecialchars($_COOKIE['supercookie2']));
mysql_query("UPDATE t_compt_2 set statut='0' WHERE login='$login'");
echo '<a>Vous avez été déconnecté !</a>';
header("Refresh: 1; URL=./index.php");
?>
Configuration: Windows XP
Firefox 3.5.3

10 réponses

  1. Ta connexion par cookie est foireuse, en l'état, n'importe qui peut se connecter sur n'importe quel compte.

    Pour ta connexion par form, tu ne dois pas indiquer si le login est ok si le mot de passe est faux.
    Un mot de passe, ça se hashe, on ne le stocke jamais en clair dans une bdd.

    Pourquoi tu utilises htmlspecialchars avant de passer tes variabls dans tes requetes ?
    htmlspecialchars ne sert qu'à l'affichage.

    C'est quoi la différence entre login et pesdo ?
    Pas bien saisi.

    Il sert à quoi le second cookie ?
    0
    1. bonjour

      il y a 2 cookie 1 pour le login et un autre pou le mots de passe

      Pour moi un login est un identifien comme un numero de serrie

      pseudo = hormi
      login = 1524moerfger121
      mdp = 13651fve321321
      0
      1. quelqu'un peut il m' aidé a sortir des script un peux plus sécurise ?
        0
        1. Même la connexion est foireuse.
          Je n'ai pas testé mais essayes avec un espace ou même rien du tout.
          0
          1. se système marche chez moi, je voudrais juste un cout de main pour faire mieux et que l'on m'explique les erreurs
            0
            1. Pour la connexion, voici comment tu pourrais faire:
              <?php
              $login = trim(addslashes($_POST['login']));
              $password = md5(trim(addslashes($_POST['password'])));
              
              $sql = 'SELECT id,password FROM membres WHERE login = "'.$login.'"';
              $req = mysql_query($sql);
              $nb = @mysql_num_rows($req);
              if($nb > 0) {
                $membre = mysql_fetch_assoc($req);
                if($password === $membre['password']) {
                  echo 'ok';
                  // ...
                } else {
                  echo 'Mauvais password';
                }
              } else {
                echo 'Login inexistant.';
              }
              ?>
              0
              1. la jais pas tout compris de comment ca marche
                0
                1. Voilà avec des commentaires :
                  <?php
                  // On retirer les espaces au debut et en fin de chaine et on applique déjà addslashes
                  $login = trim(addslashes($_POST['login']));
                  $password = md5(trim(addslashes($_POST['password'])));
                  
                  // SQL : Selectionner l'id (pour le stocker en session après) et 
                  // le mot de passe (hashé en md5, pour le comparer par arpès)
                  $sql = 'SELECT id,password FROM membres WHERE login = "'.$login.'"';
                  $req = mysql_query($sql);
                  
                  // On compte le nombre d'entrée dont le login est $login (cf. la requête). 
                  // Le "@" permet de ne pas afficher d'erreur si il n'y a pas d'erreur.
                  $nb = @mysql_num_rows($req);
                  if($nb > 0) {
                    $membre = mysql_fetch_assoc($req);
                    if($password === $membre['password']) {
                      echo 'ok';
                      // ...
                    } else {
                      echo 'Mauvais password';
                    }
                  } else {
                    echo 'Login inexistant.';
                  }
                  ?>
                  0