Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1449 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] script de login

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] script de login

n°1302436
hugoOo
laisse pas dépasser ton pixel
Posté le 09-02-2006 à 19:54:37  profilanswer
 

echo 'Salut tout le monde,
Pour mon site, je dois écrire une page d'identification avec 2 champs : pseudo et mot de passe! Les pseudos et mots de passse sont stockés dans une base de donnée. Et je voudrais que quand le pseudos et le mot de passe sont bons,
il y est un lien vers une page qui soit spécifique à chaque utilisateur (pour ça j'utilise un champs url dans ma base de donnée)';
1) le formulaire:

Code :
  1. <div align="left"><h3>s'identifier :</h3></div><br>
  2. <form method="post" action="/inc/files/login.php">
  3. <div align="left"><h3>pseudo : </h3></div><div align="right"><input type="text" name="pseudo"></div><br>
  4. <div align="left"><h3>mot de passe : </h3></div><div align="right"><input type="password" name="motdepasse">
  5. <input type="submit" value="Valider"></div>
  6. </form>


2) le traitement du formulaire :  

Code :
  1. <?php
  2. $pseudo=$_POST['pseudo'];
  3. $motdepasse=$_POST['motdepasse'];
  4. require ($_SERVER['DOCUMENT_ROOT'].'/inc/bd.inc.php');
  5. if($pseudo = "" OR $motdepasse = "" ) {
  6.     echo "Attention, au moins un des champs n'a pas été rempli!";
  7. } else{
  8.     $db = mysql_connect( $bdserveur, $bdutilisateur, $bdpass);
  9.     mysql_select_db( $bdbase,$db);
  10.     $sql = "SELECT url FROM users WHERE pseudo='$pseudo' AND motdepasse='$motdepasse'";
  11.     $req = mysql_query($sql) or die('Pseudo ou mot de passe erroné!<br><a href="../login.inc.php">retour</a>');
  12.     echo 'Salut '.$pseudo.', tu as bien été identifié!<br><a href="'.$req.'/admin.php">continuer</a>';
  13. }
  14. ?>


a chaque fois j'obtient "Pseudo ou mot de passe erroné! retour! ", quelqu'un peut t'il m'aider?


Message édité par hugoOo le 09-02-2006 à 20:13:00
mood
Publicité
Posté le 09-02-2006 à 19:54:37  profilanswer
 

n°1302440
odo91600
Posté le 09-02-2006 à 20:04:56  profilanswer
 

moi, j'utilise ça , si tu veux t'en inspirer.
 

Code :
  1. <?
  2. require("connect2bdd.php" ) ;
  3. connect2bdd();
  4. $name1=$_POST["name1"];
  5. $pass1=$_POST["pass1"];
  6. $ress = mysql_query("SELECT * FROM webmasters WHERE name='$name1' and pass='$pass1' " ) or die("erreur de requette 1 " ); 
  7. $existe=mysql_numrows($ress); 
  8. if(!$existe){
  9. echo "<center>Veuillez vérifier vos données</center>";
  10. include("f_log.php" );
  11. }else{
  12. session_start(); 
  13. session_register("name" );
  14. $query ="UPDATE webmasters SET ";
  15. $query.="visite=visite + 1 , ";
  16. $query.="lastlog='" . date("Y-m-d H:i:s" ) . "' ";
  17. $query.="WHERE name='$name1'" ; 
  18.              $result = mysql_query($query);
  19. $_SESSION["name"]=session_name();
  20. $_SESSION["sess_id"]=session_id();
  21. $_SESSION["login"]=$name1;
  22. Header("Location: Sommaire.php" );
  23. }
  24. ?>


 :hello:

n°1302447
hugoOo
laisse pas dépasser ton pixel
Posté le 09-02-2006 à 20:17:23  profilanswer
 

oui merci ça ma aidé à corrigé une erreur mais ce n'est pas vraiment ce que je cherche à faire! je pense que l'erreur vient de

Citation :

$sql = "SELECT url FROM users WHERE pseudo='$pseudo' AND motdepasse='$motdepasse'";

je ne sais pas bien ou mettre des ' et des ", quelqu'un pour m'aider ? :hello:

n°1302490
Manu la Sc​ience
...la science ... pas toujours
Posté le 09-02-2006 à 21:09:09  profilanswer
 

Ca ne serait pas plutôt cela :

Code :
  1. $sql = "SELECT url FROM users WHERE pseudo='".$pseudo."' AND motdepasse='".$motdepasse."'";


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°1302540
pouchat
Posté le 09-02-2006 à 22:49:17  profilanswer
 

ça sent la futur faille php, genre SQL injection. Même pas de vérif au niveau des variable ni même un petit addslashes()..
C'est pourtant un classique le login...
 
http://www.haypocalc.com/wiki/Inje [...] t_de_passe
 

n°1302618
Manu la Sc​ience
...la science ... pas toujours
Posté le 10-02-2006 à 08:41:11  profilanswer
 

En sécurisant :
 

Code :
  1. $pseudo=mysql_real_escape_string($pseudo);
  2. $motdepasse=mysql_real_escape_string($motdepasse);
  3. $sql = "SELECT url FROM users WHERE pseudo='".$pseudo."' AND motdepasse='".$motdepasse."'";


 
Est-ce suffisant pour éviter le SQLinjection ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°1302639
pouchat
Posté le 10-02-2006 à 09:58:04  profilanswer
 

déjà plus sympa.
2ème chose, pour le motdepasse il serait plus sage de mettre son HASH genre MD5 dans la base. Non seulement ca évite d'avoir les pass écrit en clair (pratique si hack sur la base) et ça garantis (un minium) pour les utilisateurs que l'on va pas "piquer" leur passe. (Sachant qu'en règle général, la majorité des utilisateurs se serve du même pass pour tous leurs comptes...)

n°1302673
fluminis
Posté le 10-02-2006 à 10:32:57  profilanswer
 

Code :
  1. if($pseudo = "" OR $motdepasse = "" ) {


il te faudrait pas plustot ecrire :

Code :
  1. if($pseudo == "" OR $motdepasse == "" ) {


 
?


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1302725
cinocks
Posté le 10-02-2006 à 11:15:26  profilanswer
 

odo91600 a écrit :

moi, j'utilise ça , si tu veux t'en inspirer.
 

Code :
  1. <?
  2. require("connect2bdd.php" ) ;
  3. connect2bdd();
  4. $name1=$_POST["name1"];
  5. $pass1=$_POST["pass1"];
  6. $ress = mysql_query("SELECT * FROM webmasters WHERE name='$name1' and pass='$pass1' " ) or die("erreur de requette 1 " ); 
  7. $existe=mysql_numrows($ress); 
  8. if(!$existe){
  9. echo "<center>Veuillez vérifier vos données</center>";
  10. include("f_log.php" );
  11. }else{
  12. session_start(); 
  13. session_register("name" );
  14. $query ="UPDATE webmasters SET ";
  15. $query.="visite=visite + 1 , ";
  16. $query.="lastlog='" . date("Y-m-d H:i:s" ) . "' ";
  17. $query.="WHERE name='$name1'" ; 
  18.              $result = mysql_query($query);
  19. $_SESSION["name"]=session_name();
  20. $_SESSION["sess_id"]=session_id();
  21. $_SESSION["login"]=$name1;
  22. Header("Location: Sommaire.php" );
  23. }
  24. ?>


 :hello:


 
Script dangereux. Aucune protection du post. On peut y faire de l'injection SQL comme on veut. Les mots de passe ne doivent pas etre en clair dans la base ;).


---------------
MZP est de retour
n°1302853
odo91600
Posté le 10-02-2006 à 13:08:33  profilanswer
 

ah ?
comment securisé ça alors ?

mood
Publicité
Posté le 10-02-2006 à 13:08:33  profilanswer
 

n°1302877
cinocks
Posté le 10-02-2006 à 13:27:00  profilanswer
 

euh tu as un lien donné juste au dessus.


---------------
MZP est de retour
n°1302982
odo91600
Posté le 10-02-2006 à 15:00:27  profilanswer
 

oups (avé pas vu)
merci beaucoup pour le conseil  :jap:


Message édité par odo91600 le 10-02-2006 à 15:00:55
n°1303273
hugoOo
laisse pas dépasser ton pixel
Posté le 10-02-2006 à 20:56:49  profilanswer
 

merci tout le monde de vos réponses mais j'ai pas vrément compris ce que je dois ajouter à mon script pour le sécurisé? :

Code :
  1. <?php
  2. $pseudo=$_POST['pseudo'];
  3. $motdepasse=$_POST['motdepasse'];
  4. require ($_SERVER['DOCUMENT_ROOT'].'/inc/bd.inc.php');
  5. if($pseudo == "" OR $motdepasse == "" ) {
  6.     echo "Attention, au moins un des champs n'a pas été rempli!";
  7. } else{
  8.     $db = mysql_connect( $bdserveur, $bdutilisateur, $bdpass);
  9.     mysql_select_db( $bdbase,$db);
  10.     $sql = "SELECT url FROM users WHERE pseudo='".$pseudo."' AND motdepasse='".$motdepasse."'";
  11.     $req = mysql_query($sql) or die('Pseudo ou mot de passe erroné!<br><a href="../login.inc.php">retour</a>');
  12.     echo 'Salut '.$pseudo.', tu as bien été identifié!<br><a href="'.$req.'/admin.php">continuer</a>';
  13. }
  14. ?>


Message édité par hugoOo le 10-02-2006 à 21:11:14
n°1303819
fluminis
Posté le 12-02-2006 à 18:27:09  profilanswer
 

Hello,
prennons un exemple :
$motdepasse = "' or '1'='1";
ta requete sql deviendrait :
$sql = "SELECT url FROM users WHERE pseudo='".$pseudo."' AND motdepasse='' or '1'='1'";
=> hop le malfaiteur peut se logguer avec n'importe quel login.
 
Pour securiser tout ça, il faut echapper les valeurs rentrées par l'utilisateur (addslashes, mysql_escapestring, ...)


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1304147
hugoOo
laisse pas dépasser ton pixel
Posté le 13-02-2006 à 11:16:44  profilanswer
 

j'ai refait mon script, sa marche :  

Code :
  1. <?php
  2. $pseudo=$_POST['pseudo'];
  3. $motdepasse=$_POST['motdepasse'];
  4. require ($_SERVER['DOCUMENT_ROOT'].'/inc/bd.inc.php');
  5. if($pseudo == "" OR $motdepasse == "" ) {
  6.     echo "Attention, au moins un des champs n'a pas été rempli!<br><a href=\"../../essai.php\">retour</a>";
  7. } else{
  8.     $db = mysql_connect( $bdserveur, $bdutilisateur, $bdpass);
  9.     mysql_select_db( $bdbase,$db);
  10.     $sql = "SELECT * FROM users WHERE pseudo='".$pseudo."' AND motdepasse='".$motdepasse."'";
  11.     $result = mysql_query($sql, $db);
  12.     $nbr = mysql_num_rows($result);
  13.      if($nbr == 1) {
  14.       echo 'Salut '.$pseudo.', tu as bien été identifié!<br><a href="../../'.$pseudo.'/admin.php">Continuer!</a>';
  15.       $_SESSION['username'] = $pseudo;
  16.      } else{
  17.       echo 'Pseudo ou mot de passe incorrect!<br><a href="'.$_SERVER['DOCUMENT_ROOT'].'index.php">retour</a>';
  18.      }
  19. }
  20. ?>


par contre je n'ai pas bien compris ou je dois utiliser addslashes ou mysql_escapestring
quelqu'un peut t'il m'aider?

n°1304151
sielfried
Posté le 13-02-2006 à 11:21:03  profilanswer
 

A chaque fois que tu utilises une variable qui peut provenir de l'utilisateur dans une requête.
 
http://fr3.php.net/mysql_real_escape_string


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1305487
hugoOo
laisse pas dépasser ton pixel
Posté le 14-02-2006 à 17:32:26  profilanswer
 

j'ai bien compris les injections sql mais je n'ai pas compris ce que fait mysql_real_escape_string, j'ai écrit sa:

Code :
  1. $pseudo=mysql_real_escape_string($pseudo);
  2. $motdepasse=mysql_real_escape_string($motdepasse);


est-ce suffisant?

n°1305637
dwogsi
Défaillance cérébrale...
Posté le 14-02-2006 à 21:19:13  profilanswer
 

mysql_real_escape_string t'assure que tout les carctère "spéciaux" on été echappé puisque c'est sa fonction.

n°1305687
hugoOo
laisse pas dépasser ton pixel
Posté le 14-02-2006 à 23:17:17  profilanswer
 

et je dois ensuite passer mes variables dans addslashes() ou pas?

n°1305689
dwogsi
Défaillance cérébrale...
Posté le 14-02-2006 à 23:21:48  profilanswer
 

Non parceque tu risque de te retrouver avec plein de \\ dans ta chaîne. il me semble que mysql_real_escape_string() est suffisant.

n°1305694
hugoOo
laisse pas dépasser ton pixel
Posté le 14-02-2006 à 23:35:54  profilanswer
 

oki merci de ton aide :D

n°1305700
dwogsi
Défaillance cérébrale...
Posté le 14-02-2006 à 23:57:13  profilanswer
 

Mais je t'en prie. :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] script de login

 

Sujets relatifs
[PHP/PDF] Détecter qu'un PDF est protégé[PHP] CMS pour site d'un goupe de rock
Client-serveur avec socket en C (client) vers PHP (serveur)[PHP] vérifier le contenu d'une variable
[PHP] tableau ( $num[$i] )Formulaire à choix multiple (PHP/SQL)
[MySQL] Je coince sur un problème MySQL/PHP[PHP].htaccess et includes
PHP formulaire et database[PHP] htaccess: récuperer le login dans un script chez free
Plus de sujets relatifs à : [PHP] script de login


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR