Authentification php

rems675 Messages postés 1 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 9 janvier 2011 - 9 janv. 2011 à 21:00
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 14 janv. 2011 à 10:47
Bonsoir,
J'ai un énorme problème et je comprend pas, ou plus du tout, j'ai tenté des millier de chose mais rien à faire.
Cela concerne une authentification en php avec une base MySql
j'ai une petit formulaire qui ressemble à ça :
    <title>
        identifiez-vous....
    </title>

        


            <form 

            action="login.php" method="post">
    
            <center> 
</center>
            <center> 
</center>
            <center>
 </center>    

            </form>
        
</HTML>


Et un fichier d'analyse login.php

<?php
session_start();


$db = mysql_connect('localhost','root','root') or die ('Erreur de selection'.mysql_error());
mysql_select_db('CANALERT', $db)  or die ('Erreur de selection'.mysql_error());

$isConnected = false;

if( isset($_POST) && (!empty($_POST['username'])) && (!empty($_POST['password'])) )
{
$pass = md5($_POST['password']); // mise en variable du mot de passe crypté

extract($_POST); // importe les variables dans la table des symboles, verifie chaque clé afin de controler si elle possede un nom de variable valide 				   // et verifie les collisions avec des varibles exsitantes dans la tables des symboles

// on va recherche le mot de passe corresspondant à cet user
$sql sprintf( "SELECT login, password, nom, prenom, droit, mail FROM comptes WHERE login '%s' AND password = '%s'", 
mysql_real_escape_string($login), //protege les caracteres spéciaux d'une commande SQL, resiste a une attaque par injection sql pour 								        //connaitre les identifiant d'une personne
mysql_real_escape_string($password));

$req = mysql_query($sql) or die ('Erreur SQL : 
'.$sql);

// on verifie que l'user existe
if( mysql_num_rows($req) == 1)
{
$data = mysql_fetch_assoc($req);
// on verifie que sont mot de passe est bon
if( $password == $data['password']
{
$isConnected = true;
}
}
}


if($isConnected == true)
{
$_SESSION['login'] = $data['login'];
$_SESSION['nom'] = $data['nom'];
$_SESSION['prenom'] = $data['prenom'];
$_SESSION['email'] = $data['mail'];
$_SESSION['privilege'] = $data['droit'];
echo'Votre connexion est OK : voila les variable

';
var_dump($_SESSION);
}
else
{
echo 'Une erreur est survenue';
}
?>


Et lorsque je valide mon formulaire j'ai une page blanche !!! je suis vraiment perdu là !!! Si quelqu'un peut m'apporter de l'aide....
merci d'avance

3 réponses

amirabed Messages postés 1 Date d'inscription samedi 14 novembre 2009 Statut Membre Dernière intervention 9 janvier 2011
9 janv. 2011 à 22:33
merci pour la confirmation
0
cs_LDDL Messages postés 33 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 7 mars 2013
14 janv. 2011 à 09:28
Slt, je n'ai pas tester ton code mais ceci devrait t'aider à visionner tes variables et à comprendre d'ou vient le problème.

http://www.phpcs.com/tutoriaux/DEBOGUEUR-PHP-XDEBUG_1174.aspx
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
14 janv. 2011 à 10:47
Salut,

Alors tout d'abord la solution à ton problème premier :
			// on verifie que sont mot de passe est bon
if( $password == $data['password']
{
$isConnected = true;
}

Deux remarques :
1. Il manque la parenthèse de fermeture du if.
2. Cette étape est inutile car, si le mot de passe fourni n'était pas bon, ta requête n'aurait pas renvoyée de résultat.

Une autre remarque un peu plus générale qui est sans doute la source de ton problème : comment est-ce que tu stocke le mot de passe ? Haché en md5 ou en clair ? Dans ton script tu fait toutes tes comparaisons avec le pass en clair et non son hash, alors forcément s'il est stocké en md5 tu ne vas pas arriver à authentifier l'utilisateur.

Maintenant une énorme erreur :
extract($_POST);

JAMAIS ! JAMAIS ! JAMAIS !

Dans le cas présent c'est une énorme faille de sécurité qui permet à quiconque de s'authentifier avec tous les paramètres qu'il souhaite (nom, droits, etc). Il permet en effet de forcer la valeur de $isConnected ainsi que de créer le tableau $data avec les valeurs que l'on souhaite à l'intérieur. Avec un identifiant/mot de passe inexistant, ni $data ni $isConnected ne sont remplacés et l'on arrive alors directement au bout de code qui va gentillement placer mes valeurs de $date dans la session. Et paf, je suis identifié avec les droits que je veux!
0
Rejoignez-nous