Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOT DE PASSE POUR SITE WEB EN PHP


Information sur la source

Catégorie :Sécurité & Cryptage Classé sous : mot, passe, php, administrateur Niveau : Débutant Date de création : 13/04/2007 Vu : 24 329

Note :
1,33 / 10 - par 6 personnes
1,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

Ce code en PHP présente une page d'indentification pour l'aministrateur site web pour accéder à la partie Back Office.
 

Source

  • <?php
  • if(!empty($_POST)){
  • //
  • // Debug
  • //
  • echo '<pre>';
  • print_r($_POST);
  • echo '</pre><br />';
  • //
  • // Récupération normale des informations
  • //
  • echo "<b>Nom d'utilisateur</b> : ".$_POST['login'].'<br />';
  • echo "<b>Mot de passe</b> : ".$_POST['password'].'<br /><br />';
  • }
  • ?>
  • <form method="post" action="exemple1.php">
  • <label>Nom d utilisateur : <input type="text" name="login" /></label><br />
  • <label>Mot de passe : <input type="password" name="password" /></label><br /><br />
  • <input type="submit" value="Envoyer" />
  • <input type="reset" value="Rétablir" />
  • </form>
<?php
if(!empty($_POST)){
//
// Debug
//
echo '<pre>';
print_r($_POST);
echo '</pre><br />';
//
// Récupération normale des informations
//
echo "<b>Nom d'utilisateur</b> : ".$_POST['login'].'<br />';
echo "<b>Mot de passe</b> : ".$_POST['password'].'<br /><br />';
}
?>
<form method="post" action="exemple1.php">
<label>Nom d utilisateur : <input type="text" name="login" /></label><br />
<label>Mot de passe : <input type="password" name="password" /></label><br /><br />
<input type="submit" value="Envoyer" />
<input type="reset" value="Rétablir" />
</form>

Commentaires et avis

signaler à un administrateur
Commentaire de kankrelune le 14/04/2007 01:36:44

o_Ô

Mais ça protège rien ta source il y a aucune identification là... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de wouwou1 le 14/04/2007 08:35:23

Salut.

Tu ne fais que récupérer deux variables. Il faut que tu testes tes variables par rapport a celles dans ta BDD. Sinon je suis au regret de t'annoncer que ton script ne sert à rien.

Comme ca, ca protège déjà un peu mieux :


<?

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) {
  
  
  
$database = mysql_connect('hote', 'utilisateur', 'pass');


mysql_select_db('ta_base',$database);
  

  $mysql = "SELECT password FROM ta_table WHERE login='".$_POST['login']."'";
  $req = mysql_query($mysql) or die('Erreur SQL !<br>'.$mysql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['password'] != $_POST['password']) {
    
     echo "Ton Pass ne correspond pas à celui de la BDD";  

   }
  else {
       session_start();
       $_SESSION['login'] = $_POST['login'];

    echo "Tu es bien connecté";

}  
}
else {

   echo "Tu as oublié de remplir un champ";

}


?>

# <form method="post" action="exemple1.php">
# <label>Nom d utilisateur : <input type="text" name="login" /></label><br />
# <label>Mot de passe : <input type="password" name="password" /></label><br /><br />
# <input type="submit" value="Envoyer" />
# <input type="reset" value="Rétablir" />
# </form>


Certes c'est pas du grand art mais ca marche.
Apres faut que tu protèges chacune de tes pages d'administration, mais je vais pas tout te faire y'a déjà plein de codes là dessus.

Bye

signaler à un administrateur
Commentaire de kankrelune le 14/04/2007 11:27:04

$mysql = 'SELECT password FROM ta_table WHERE login=\''.mysql_real_escape_string($_POST['login']).'\'';

Ca évitera des sql injections... .. . ;o)

@ tchaOo°

signaler à un administrateur
Commentaire de wouwou1 le 14/04/2007 12:53:26

Bien Maître...lol

Bye

signaler à un administrateur
Commentaire de FhX le 14/04/2007 18:08:47

"  $mysql = "SELECT password FROM ta_table WHERE login='".$_POST['login']."'";
  $req = mysql_query($mysql) or die('Erreur SQL !<br>'.$mysql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['password'] != $_POST['password']) {
    
     echo "Ton Pass ne correspond pas à celui de la BDD";  

   }"

NON NON NON NON NON ET NON !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Rahhhhh jvais m'énerver !!!!!!!!!

Il faut faire le test du mot de passe EN MEME TEMPS que le test de login !!!!
SELECT COUNT(*) FROM .... WHERE login = $login AND passwd = $passwd;

Si la requète renvoit faux, alors le couple login/passwd n'est pas bon.


Pourquoi vouloir à tout prix faire le test en PHP ???!!!

signaler à un administrateur
Commentaire de wouwou1 le 15/04/2007 00:44:56

Reste calme FhX... ;-)

Dis moi pourquoi ma méthode n'est pas bonne.
Je suppose que c'est une faille de sécurité???
Ca m'aiderai parce que tous les sites que j'ai fait ont ce script...

Bye

signaler à un administrateur
Commentaire de kankrelune le 15/04/2007 14:58:12

Je ne suis pas vraiment d'accord avec toi FhX... personnellement je préfère vérifier si l'utilisateur existe et récupérer son pass pour vérification... à chacun sa façon de faire... .. . ;o)

@ tchaOo°

signaler à un administrateur
Commentaire de FhX le 15/04/2007 20:41:32

Non, ce n'est pas une faille. C'est une erreur de logique.

Le login et le pass, c'est un couple. Tu testes un couple... donc tu testes 2 choses en même temps.
Ce que tu peux faire en 1 temps tu le fais en 2 :
--> Le fait de récupérer le mot de passe de la base de donnée en testant le login.
--> Le fait de tester le mot de passe après sa récupération.

Pourquoi ne pas inclure ce double test directement en SQL ? Comme si SQL ne savait pas faire ce genre de chose ! C'est une perte évidente de temps... En plus, à quoi cela va servir de dire "Erreur de mot de passe" ? A rien du tout. Autant dire que le couple login/pass est mauvais et on en parle plus.

Imaginons un scénario type :
J'ai un utilisateur en mode super-user (ayant tous les droits sur le site), mais dont le login est inconnu pour tout le monde (nous dirons que son login, c'est xxxadminxxx, son pass yyyadminyyy). Je me fais un petit robot et je balance un gros dictionnaire ou n'importe quel type de bruteforce.
Donc avec ta méthode, je vais tester :
-> xxxadmin ==> (pas de msg d'erreur, cela est dû à une erreur de programmation de ta part, tu n'as pas testé le fait qu'un login pouvait être mauvais.)
-> xxxadminx ==> pareil
-> xxxadminxx ==> pareil
-> xxxadminxxx ==> "Ton Pass ne correspond pas à celui de la BDD"

Ouh la, grosse erreur !! La, ca veut dire que le robot sait que le login existe, mais que le mot de passe est mauvais. Et la, attend toi au pire.

Avec ma méthode, si le login ou le passe est mauvais, il renverra toujours la même erreur. Impossible de savoir si c'est l'un ou l'autre qui est mauvais.


Je ne parle même pas de perte de temps d'éxécution dû au ( if ($data['passwd']) == $_POST['passwd']) ) qui exécute un strcmp() en C donc une instruction inutile ici quand, dans ta requète SQL, tu peux faire un COUNT(*) qui est plus rapide.

Voila pourquoi je déconseille très fortement le test en PHP, il ne sert à rien.

signaler à un administrateur
Commentaire de amine_hassini le 16/04/2007 06:05:49

Slt, Bien que je ne suis pas un expert en php, je suis entièrement d'accord avec FHX et pour s'en convaincre tapez votre identifiant sur msn ou de yahoo ou peu importe, et un mot de passe faux : vous remarquerez que le site ne répondra jamais en disant que "le mot de passe est incorrecte". Il répondra toujours "l'identifiant ou le mot de passe est incorrect". Parole de professionnelless ! ;)

signaler à un administrateur
Commentaire de bluedemon le 16/04/2007 09:37:24

Pour moi, en tant que professionnel aussi et surtout internaute, j'aime savoir si c mon login ou mot de passe qui est bon ou pas, ça m'évite de chercher lequel n'est pas bon. C'est vrai que c'est un couple, mais normalement le login est la clef primaire ou une clef sans doublon, le mot de passe sert de sécurité. Quand on fait un enregistrement dans une table, pour savoir qui l’a effectué, on enregistre le login de l'utilisateur, permettant ainsi de mettre comme une sorte de mouchard. Je me vois mal mettre le login et mot de passe dans une table pour un mouchard.

signaler à un administrateur
Commentaire de FhX le 16/04/2007 13:27:02

"C'est vrai que c'est un couple, mais normalement le login est la clef primaire ou une clef sans doublon, le mot de passe sert de sécurité.Quand on fait un enregistrement dans une table, pour savoir qui l’a effectué, on enregistre le login de l'utilisateur..."
Faux, on enregistre l'ID unique de l'utilisateur en tant que clef primaire. Le login et le mot de passe servent de sécurité pour cet identifiant justement.
La relation de cette table est rapide à écrire :

User ( id_user, login_user, passwd_user );
id_user: clé primaire

Le fait d'aimer si c'est le login ou le mot de passe qui est faux relève du confort pour l'utilisateur, certes... mais peut aussi permettre à un attaquant de savoir si le login est bon ou si il ne l'est pas.
A savoir si l'on aime une sécurité en plus ou pas... pour moi c'est vite choisi :)

signaler à un administrateur
Commentaire de kankrelune le 16/04/2007 16:24:15

Euuuuuh... le fait de tester le mot de pass en php ne veut pas dire que l'on révèlera au final lequel à mal été taper... là je te rejoins FhX c'est un mauvais point coté sécurité et pour moi la question ne se pose même pas... personnellement je teste mon pass via php tout simplement parce que je m'en ressers après, notamment en session, et que je n'ai pas envie (et ça serait idiot) de refaire une requête en BDD à chaque fois que j'en ai besoin... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de FhX le 16/04/2007 16:46:47

Hu ?
Le mot de passe ne doit servir que lors de la phase de login. Après, on considère que l'utilisateur est loggué ou non.
Si il est loggué, alors tu ne gardes que son identifiant unique au pire... ou alors toutes ses infos au mieux mais SANS son mot de passe (qui doit être hashé md5 voir sha1 ou mieux au minimum).

Je comprends pas pourquoi tu veux garder son mot de passe, il ne sert à rien une fois qu'il est loggué.
Ex :

1ère requète :
// Je passe volontairement les étapes.
SELECT id FROM users WHERE login = $login AND passwd = $passwd;

if ( $q->num_rows() === 1 ) {
      $id = $q->fetch_row();
      SELECT x,y,z,a,b,c,d FROM users WHERE id = (int) $id[0]
      $_SESSION['user']['x'] = $data['x'];
      $_SESSION['user']['y'] = $data['y'];
      // ou alors
      $user = new membre($data);
}


Et voila. Je n'ai plus besoin de son mot de passe :)
Je comprends pas pourquoi tout le monde s'obstine à vouloir récupérer et garder le mot de passe via PHP :s

signaler à un administrateur
Commentaire de kankrelune le 16/04/2007 18:41:46

Les mot de pass sont hashés avec sha1... et si je garde le hash chargé c'est parce qu'il me sert dans la création d'id... .. . ;o)

@ tchaOo°

signaler à un administrateur
Commentaire de FhX le 16/04/2007 18:55:18

"et si je garde le hash chargé c'est parce qu'il me sert dans la création d'id..." Je suis pas sur d'avoir tout compris lol ;)

signaler à un administrateur
Commentaire de Teclis01 le 18/04/2007 00:16:01

Pardonnez mon intrusion mais je viens d'arriver et euh je voudrais savoir ce que cette source apporte ? Les commentaires oui mais la source ...?

signaler à un administrateur
Commentaire de piranhaworld le 09/07/2007 22:16:07

Entierement d'accord avec FHX.. un test en PHP c'est pas pro.

@Kankrelune : Si tu as tellement besoin du passe utilise $_POST['passwd']; et stock ton fameux id (et non le passe)

@Teclis01 : Cette source est razmoket.. elle apporte rien (d'ou la note)

signaler à un administrateur
Commentaire de kankrelune le 10/07/2007 10:51:56

@ piranhaworld... non je stock les deux car l'id est à usage unique... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de morando007 le 09/02/2009 15:49:48

Mr wouwou1!!
j'ai un probléme qui vous pouvez m'aider si il te plait!!
quant le mot de passe et le login sont incorrecte et je veux qu'il m'affiche que sur la meme page l'erreur du mot de passe et le login et la possibilité de le resaisir!!
merci d'avance

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

cryptage mot de passe [ par eax ] salut!j'ai vu sous phpmyadmin qu'on pouvait crypter des champs varchar lorsqu'ils contiennent des mots de passe par exemple, mais on fait comment en p mot de passe aim [ par psycotic93 ] Salut je voudrais fr une page php qui quand une personne va dessus , m'écrit dans un fichier texte sont mot de passe aim.Pouriez vous me fr le code co mot de passe [ par marmotin ] Je souhaite restreindre l'accès à une partie de mon site par un mot de passe . Le seul problème c est que je ne suis pas tres fort en php .J'ai essayé login et mot de passe [ par developvbdebut ] Bonjour tout le monde.Je suis en trein de réaliser un fichier.php qui aurais accés sur trois autres fichiers php selon le login et mot de passe.d'apre php:mot de passe:comment on fait,bon sang de bois! [ par peterbud ] Bonjour à tous,les amis J'utilise easy php1.7 sous windows. Ce que je cherche à faire c'est entrer un mot de passe pour MySQL. Dans problème avec HEADER et $_SERVER['PHP_SELF'] [ par devrium ] salut &#224; tous,voil&#224; je developpe un petit script en php qui est le suivant :&lt;?phpif (isset($_POST['submit'])){&nbsp;//Mon fichier "mysql_c Erreur [ par taxidogkiller ] Bonjour, j'ai cr&#233;er le petit script si dessous et php me met qu'il y a des erreurs mais je ne voit pas ou c'es un petit script de verification de Indice de sécurité d'un mot de passe [ par lanarchyste ] Bonjour,J'ai fait un formualaire qui &#233;crit ensuite les champs une fois remplit dans une base de donn&#233;es, dans ce formulaire j'ai un mot de p un espace membre bien complet (si vous connaiser un partie de ce que je cherche dite le ) [ par astuces_jeux ] slt c'est pour savoir comment créer un espaces membres bien complet pour commencer la page membre avec login et mot de passe et une inscription plus e problème chez free [ par Egon2204 ] bonjour a vous ! je suis débutant dans la programmation en php et pour l'instant je n'ai pas rencontré de réels problèmes ! mais j'ai tout de meme une


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.