Accès page membre

Signaler
Messages postés
56
Date d'inscription
mercredi 14 septembre 2011
Statut
Membre
Dernière intervention
7 octobre 2012
-
Messages postés
83
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
14 décembre 2011
-
Bonjour, un petit problème. Ma page d'accès tourne en rond en me disant "mauvais login ou mot de passe" alors que je suis bien enregistrer dans ma base sql. Où est cette petite erreur qui me pose tant de problème?!!

ma page "identification":

<?php
if (isset($_GET["m"]))
{
?>
<form action="securite.php" method="post">


Login :




Mot de passe :






<?php
if ($_GET["m"]=="1")
{
echo "Mauvais login ou mot de passe !

";
}
?>
<?php
?>
[validation.php S'inscrire]




<?php
}
?>




Ma "securite"


<?php
session_start();
if ($_POST["userid"] && $_POST["password"])
{
require "connect.inc.php";
$res = @mysql_query("SELECT userid FROM users WHERE userid='".mysql_real_escape_string($userid)."' AND password='".mysql_real_escape_string($password)."' AND level='registered'");
if(@mysql_num_rows($res) != 0)
{
$verified_user = $_POST["userid"];
session_register("verified_user");
Header("Location: ../".$page_redirection);
}
else
{
Header("Location: identification.php?m=1");
}
}
else
{
Header("Location: identification.php?m=1");
}
?>

Merci par avance pour vos réponses.

5 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

$res = @mysql_query("SELECT userid FROM users WHERE userid='".mysql_real_escape_string($userid)."' AND password='".mysql_real_escape_string($password)."' AND level='registered'");

Les variables $userid et $password ne sont pas définies, tu devrais remplacer respectivement par $_POST['userid'] et $_POST['password'].

J'en profite pour soulever quelques points :
- C'est une très mauvaise idée de stocker les mots de passe en clair dans ta base de données, et dans pas mal de pays c'est même illégal.
- Ta variable $verified_user ne sert à rien du tout.
- A première vue la sécurité de ton système laisse à désirer, par exemple on semble pouvoir facilement faire du XSS.
Messages postés
56
Date d'inscription
mercredi 14 septembre 2011
Statut
Membre
Dernière intervention
7 octobre 2012

C'était un vieux code que j'avais.
T'as raison je vais en refaire un autre, c'est plus sûr.

Merci pour ton éclairage.
Messages postés
83
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
14 décembre 2011
1
Salut,

petit message aux codeurs débutants,

J'appuie le propos de TychoBrahe, à propos de mots de passe en clair : j'ai repris il y à quelques années, une base existante, et j'ai trouvé plein de mots de passe et adresses mail. Il y a fort à parier que certaines personnes avait le même mot de passe pour d'autres applications...
J'ai évidement supprimé tout cela, et utilisé depuis une fonction de codage depuis, type md5...

Par ailleurs, la sécurité merite un peu plus d'effort :
- un test if (isset($_POST['userid'])) est une idée,
- utilisation des ' au lieu des " dans les $_POST
- un fichier de log des tentatives réussies et ratées,
- un appel mysql_query ( ) ; suivi d'un test if ( mysql_error() ) sans le mortel die ! - heureusement absent ici. - car une erreur sql dans un process de sécurité est inquiétant !
- un compteur d'essais (erreur) par IP, pour les tentatives par dictionnaire
- ...


Je me permets d'en parler, car le "vieux code" de stephelle est plein d'enseignement.

Bon boulot donc,
MC
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,
un test if (isset($_POST['userid'])) est une idée,

empty() est encore mieux pour ce genre de cas. Mais je ne vois pas de rapport avec la sécurité.

utilisation des ' au lieu des " dans les $_POST

Ici non plus aucun lien avec la sécurité, à part un gain négligeable de performance ce n'est pas vraiment utile de changer ça.

un fichier de log des tentatives réussies et ratées,

Mieux, tu sépare totalement le système de log du reste, permettant de stocker les logs dans une entité que cette portion du code ignore totalement (txt, xml, bdd ou autre).

un appel mysql_query ( ) ; suivi d'un test if ( mysql_error() ) sans le mortel die ! heureusement absent ici. - car une erreur sql dans un process de sécurité est inquiétant !

Non, c'est le résultat de mysql_query() qu'on test à la recherche d'une erreur. Et le die() n'a rien de choquant, ce qui l'est est de fournir au visiteur les détails de l'erreur. Et si on veux bien faire, on commence par ne pas utiliser les fonctions mysql_* ;)

un compteur d'essais (erreur) par IP, pour les tentatives par dictionnaire

Pas mal mais il faut faire très attention à la manière d'implémenter ceci, il y a pas mal de pièges.
Messages postés
83
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
14 décembre 2011
1
Merci TychoBrahe pour la qualité de ta réponse,
j'en prend bonne note.


a+