Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Blog d'un programmeur
19 février 2006

Systeme d'identification performante (PHP/MySql ;))


1°] Mais c'est quoi une authentification forte ?

Une authentification permet de verifier que la personne a qui vous parlez est bien celle a qui vous croyez parler en lui posant une ou plusieurs questions. Elle est dite forte quand plusieurs questions sont demandées. Le fameux login/pass.
\
2°] Stockage des données

Vous savez tous qu'il est possible de penetrer frauduleusement dans une base de données (SQL ou autre) et donc qu'il faut proteger vos mots de passe. Un hash faisant bien souvent l'affaire mais le temps que le "pirate" mettra a le cracker dependera de la longueur du mot de passe (donc de l'utilisateur) , ce qui n'est pas vraiment commode.

Nous allons donc beaucoup compliquer la tache du "pirate" en cryptant les données.

-Mais ca revient au meme !-,me direz vous. Eh bien non, car au lieu de stocker un mot de passe et un login, nous n'allons stocker qu'un seul champs.

Nous allons utiliser un algorythme de cryptage a cle privée (ex: Blowfish) .Je ne sais malheuresement pas comment on utilise Blowfish en php (j'utilise un autre algorythm pour ce site :D), j'espere qu'une ame bienveillante est dans le coin :o, pour le môment j'utiliserais Blowfish(message, cle).


Code:
Blowfish($login, $mdp.$clesys


Vous remarquerez le $clesys qui est une cle systeme propre a votre site qui compliquera encore la tache du "pirate" (d'ailleurs a l'heure actuelle je ne vois pas comment il pourrais contourner ca ^^).

Pour utiliser un forum ou des choses utilisant un pseudo il faut forcer l'utilsateur à en utiliser un different de son login.

3°] Script d'enregistrement


<?
mysql_connect();

if (isset($_GET['submit'])) { /*register_global doit etre off ;)*/

$login = isset($_POST'login']) ? htmlentities ( stripslashes ($_POST['login'])) : FALSE;
$pseudo = isset($_POST'pseudo']) ? htmlentities ( stripslashes ($_POST['pseudo'])) : FALSE;
$mdp = isset($_POST['mdp']) ? htmlentities ( stripslashes ($_POST['mdp'])) : FALSE;

if ($login && $pseudo && $mdp) {

if ($login == $pseudo) {
echo "Votre login est identique a votre pseudo, veuillez en choisir un different !";
exit();
}

/*uid sera le champs unique d'authentification hashe, en plus, en SHA1*/
$clesys = '147';
$uid = Blowfish($login, $mdp.clesys);

$requete = "INSERT INTO $table (uid, pseudo) VALUES (SHA1('{$uid}'), '{$pseudo'})";
if (@mysql_query ($rq)) {
echo 'Merci de vous etre enregistre';
} else {
echo 'Un erreur system empeche votre enregistrement';
}

} else {
echo "Un des champs specifie n'est pas valide.";
}

} else {

//afficher le formulaire

}

?>


4°] Script de login



<?
mysql_connect();

if (isset($_GET['submit'])) {

$login = isset($_POST'login']) ? htmlentities ( stripslashes ($_POST['login'])) : FALSE
$mdp = isset($_POST['mdp']) ? htmlentities ( stripslashes ($_POST['mdp'])) : FALSE;

if ($login && && $mdp) {

$clesys = '147';
$uid = Blowfish($login, $mdp.clesys);

$rq = "SELECT * FROM $table WHERE uid=$SHA1('{$uid}')";

/*reste du script, a vous de voir pour ca ;)*/

} else {

echo "Couple login/mot de passe incorrect";

}

}else {

//afficher formulaire

}

?>


r3drum, r3drum@ProgCity.info

Publicité
Commentaires
Publicité