IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Création d'un login et mot de passe securisé avec PHP/MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Création d'un login et mot de passe securisé avec PHP/MySQL
    Bonjour à tous,

    Je me tourne vers vous car depuis quelque temps je tourne en rond et ne trouve pas de solution a mon problème. Je suis débutant en php/MySQL.
    Je suis en train de créer un site perso et j'aimerais que mon nom d'utilisateur et mot de passe lié à celui-ci soit secure. Je m'explique j'ai cherché a ce que la saisie soit sensible a la casse mais je n'ai pas réussi a atteindre ce but et aussi a sécurisé l'acces aux autres pages en tant que membre.
    Je voudrai pouvoir sniffer l'adresse ip du client pour s'assurer que ce soit bien la bonne personne mais aussi crypter le mot de passe.
    Je ne sais pas si le md5 suffit ou si il faut une autre méthode de cryptage.
    Ma page de vérification en php ressemble a ceci: (J'ai mis du code en commentaire je le laisse en suspend je ne sais pas lequel des deux est le mieu)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <?php 
    session_start();
    function verification($nom,$pass)
    {
    $host='localhost';
    $user='root';
    $password='';
    $bdd='xxx';
     
    //$loginOK=false;
     
    //On se connecte a la bdd
    $link=mysql_connect($host,$user,$password) or die('Error de connexion'.mysql_error());
    //On choisit la bonne base de donnée
    mysql_select_db($bdd) or die('Erreur de s&eacute;lection'.mysql_error());
     
    $nom_sql=mysql_real_escape_string($nom);
    $pass_sql=mysql_real_escape_string($pass);
    $sql="SELECT * FROM user WHERE login='$nom_sql' AND pass='$pass_sql'";
     
    $result=mysql_query($sql,$link);
    if(mysql_num_rows($result)>0)
    	{	
    		return TRUE;
    	}else{
    			return FALSE;
    		 }
    mysql_close();
    }
     
    if(isset($_POST['nom'])&& isset($_POST['motdepasse']))
    {
    	//on les recupere
    	$nom=$_POST['nom'];
    	$motdepasse=$_POST['motdepasse'];
     
    	//on test si le mdp est valide
    	if(verification($nom,$motdepasse)){
    	session_regenerate_id();
     
    	//On sauvegarde son nom dans la session
    	$_SESSION['nom']=$nom;
    	$message='Bienvenue '.$nom;
        }else{
    		$message='Mot de passe incorrect';
    		$message.='<a href="index.php">Retour</a>';
    	}
    }else{
    		$message='Le login ou le mot de passe est vide';
    		$message.='<a href="index.php">Retour</a>';
    }
     
    /**if(isset($_POST) && (!empty($_POST['nom'])) && (!empty($_POST['motdepasse'])))
    {
    	extract($_POST);
    	
    	//Onva chercher le mot de passe afférent à ce login
    	$sql="SELECT * FROM user WHERE login='".$_POST['nom']."' AND pass='".$_POST['motdepasse']."'";
    	$req=mysql_query($sql) or die('Erreur SQL : <br />'.$sql.'<br />'.mysql_error());
    	
    	//On verifie que l'utilisateur existe bien
    	if(mysql_num_rows($req)>0)
    	{
    		$data=mysql_fetch_assoc($req);
    		
    		//On verifie que son mot de passe est correct
    		if($password==$data['motdepasse'])
    		{
    			$loginOK=true;
    		}
    	}
    }
    
    //Si le login a ete valide on met les donnees en sessions
    if($loginOK)
    {
    	
    } else{
    	header('location:index.php');
    	}**/
     
    //On ferme la connexion avec la base de donnée
    //mysql_close();
    ?>
     
    <html>
    <head><title>Identification</title></head>
    <body><p>
    <?php echo $message ?>
    </p></body>
    </html>
    Et ma page index.php est une simple page de saisi de nom utilisateur et mdp avec un bouton de validation qui transmet mon formulaire a la page vérification.

    J'espère que vous pourrez m'aider.Et si jamais il manque des informations ou si vous avez des questions n'hésitez pas a me demander.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    j'ai cherché a ce que la saisie soit sensible a la casse
    Ca doit dejà être le cas avec ton code actuel non ?
    sécurisé l'acces aux autres pages en tant que membre.
    tu verifies pour les pages restreintes les informations que tu as mis en session lors de la verification d'identité.
    Je voudrai pouvoir sniffer l'adresse ip du client pour s'assurer que ce soit bien la bonne personne
    la c'est une mauvaise methode : ton utilisateur ne pourrait plus se connecter s'il changeait d'ip ni utiliser un autre poste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mais aussi crypter le mot de passe. Je ne sais pas si le md5 suffit ou si il faut une autre méthode de cryptage.
    pour etre précis, MD5 ne chiffre pas, il fait une empreinte.
    Cela n'apporte pas une sécurité magique venu de l'espace interstellaire durant l'authentification. Cela permet juste que le vrai mot de passe ne soit pas conservé dans la base de donnée et tu compares donc l'empreinte de ce qui as été saisi avec l'empreinte que tu as dans la base.
    Au lieu d'enregistrer le mot de passe de l'utilisateur dans la base, tu enregistres md5($motdepasse);
    Et quand tu veux vérifier tu regardes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM user WHERE login='$nom_sql' AND pass='" . md5($pass_saisi) . "'";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Pour la sensibilité a la casse non ce n'est pas le cas quand je saisi le meme user mais avec une casse différente ça fonctionne quand meme (sur ma page Login)
    Je veux que par exemple l'user Henri ne puisse se connecter qu'en tant qu'Henri et non pas aussi HenRI etc....
    Idem pour le mot de passe.
    Merci pour le md5 et les informations apportées.
    Si j'ai d'autres questions au fil de l'avancement puis-je revenir vers toi?
    Merci en tout cas

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Cela doit venir de l'interclassement de ta colonne.
    latin1_swedish_ci par exemple est insensible a la casse donc il considere que "A" = "a".
    change ton interclassement par son equivalent _bin (binaire) ou _cs (case sensitive).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pour faire une comparaison sensible à la casse tu peux utiliser "LIKE BINARY" comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM user WHERE login LIKE BINARY '$nom_sql' AND pass LIKE BINARY '$pass_sql'";
    ensuite l'utilisation de la fonction de hachage "MD5" ne sécurise pas ton mot de passe, si tu veux transmettre ton mot de passe de façon chiffrée, utilise HTTPS

  6. #6
    Candidat au Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    J'ai change l'interclassement et tout fonctionne correctement
    Il ne me reste plus qu'a faire du md5 sur le mot de passe

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mots de passe sécurisés avec PHP 5.5
    Par grunk dans le forum Langage
    Réponses: 26
    Dernier message: 16/07/2014, 13h56
  2. Mots de passe sécurisés avec PHP 5.5
    Par grunk dans le forum Langage
    Réponses: 1
    Dernier message: 18/04/2014, 09h24
  3. [PHP 5.3] Crypter un mot de passe svn avec PHP
    Par Idleman dans le forum Langage
    Réponses: 19
    Dernier message: 24/05/2012, 16h26
  4. Réponses: 3
    Dernier message: 28/10/2010, 20h51
  5. [Sécurité] Crypter un mot de passe UNIX avec PHP
    Par dom78 dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2006, 19h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo