PHP Authentification Site Web
PHP Authentification Site Web
PHP Authentification Site Web
I. Présentation
Objectifs :
L'objectif de ce tutoriel est de créer une page d'authentification pour un site internet et de protéger certaines pages du
site.
Les identifiants et mots de passe seront stockés dans une base de données.
La première étape consiste à créer une base de donnée « MonSite » dans laquelle sera stocké les différentes tables liées
au site dont la table « users ».
Une fois cette base créée, il nous faut pour atteindre notre objectif, créer une table « users » qui aura 3 champs : l'id
utilisateur, le login et le mot de passe.
Nous avons besoin d'un champ de type Integer pour l'id de l'utilisateur avec l'AUTO INCREMENT et l'Inedx à
PRIMARY, d'un champ login de type Varchar 100 (chaine de caractères) pour le login puis d'un champ password de
type Varchar 100 pour stocker les mots de passes :
Maintenant que nous avons créé notre base et note table users, il nous reste à créer un compte utilisateur du serveur
Mysql pour que le script php puisse lire les informations de la base.
Pour cela il faut retourner à la page d'accueil de phpmyadmin (petite mainson dans le menu de gauche) et cliquer sur
Privilèges en haut.
Nous allons saisir les informations du compte, dans l'exemple : login « access_site » et password « motdepasse »
Après avoir cliqué sur Exécuter, notre base de données est prête et nous avons un utilisateur pour s'y connecter et qui
peut lire les informations contenues dans la base de notre site.
Commençons par le début du commencement le formulaire d'authentification. Ce formulaire appellera le script auth.php
Page : auth.html
<html>
<head><title>Authentification requise</title></head>
<body>
<center>
<h2>Merci de vous authentifier</h2>
<form action="auth.php">
<table border="0" width="70%">
<tr>
<td><center>Nom d'utilisateur : </center></td>
<td><center><input type="text" name="login"/><center></td>
</tr>
<tr>
<td><center>Mot de passe : </center></td>
<td><center><input type="password" name="password"
/></center></td>
</tr>
</table>
<input type="submit" value="Valider" />
</form>
</center>
</body>
<html>
Il nous faut aussi maintenant un formulaire pour créer les comptes utilisateurs (qui seront stockés dans la table
« users »). Ce formulaire appellera le script d'ajout « add_user.php ».
Page : add_user.php
<html>
<head><title>Création de compte utilisateur</title></head>
<body>
<center>
<h2>Merci de saisir les identifiants du compte</h2><br /><br />
<form action="add_user.php">
<table border="0" width="30%">
<tr>
<td><center>Nom d'utilisateur : </center></td>
<td><center><input type="text" name="login"/><center></td>
</tr>
<tr>
<td><center>Mot de passe : </center></td>
<td><center><input type="password" name="password"
/></center></td>
</tr>
</table><br /><br />
<input type="submit" value="Valider" />
</form>
</center>
</body>
<html>
Maintenant que la partie html est terminée il nous reste la partie php. Cette partie sera composée de 4 fichiers :
– le fichier auth.php qui vérifiera les informations saisies par l'utilisateur
– le fichier add_user.php qui permettra d'ajouter les nouveaux utilisateurs
– un fichier fonction.php qui contiendra la fonction de connexion à la base de données et d'exécution des
requètes sql.
– Un fichier conf.site qui contiendra les informations de connexion à la base de données.
Commençons par le fichier conf.site. Ce fichier doit contenir les information d'accès à la base de données (nom
d'utilisateur, mot de passe, adresse ip du serveur, nom de la base de données).
Fichier conf.site :
<?
$BDD_hote="localhost";
$BDD_nmDB="MonSite";
$BDD_user="acces_site";
$BDD_pass="motdepasse";
?>
Avant de nous occuper des scripts d'ajout de compte et d'authentification, il nous reste le fichier fonctions.php à créer
qui contiendra les fonctions d'exécutions des requètes.
Fichier fonctions.php
<?
// Fonction d'exécution des requètes SQL
function sql($request)
{
global $bdd;
if(strrchr($request, 'SELECT'))
{
$req = $bdd->query($request);
}
else
{
$bdd->exec($request);
}
if(!empty($req))
{
while ($data = $req->fetch())
{
$res[] = $data;
}
return $res;
}
else
{
return false;
}
}
?>
Avant de créer le fichier auth.php pour gérer les authentification, nous allons créer le fichier add_user.php pour ajouter
un premier utilisateur de notre site dans notre base de données afin de pouvoir par la suite tester la page
d'authentification.
Fichier add_user.php
<?
// Fichier add_user.php
// On intègre les informations de connexion à la base de données ainsi que le fichier (ou librairie
fonctions.php)
include("conf.site");
include("fonctions.php");
// On intialise la connexion à la base de données
$bdd = new PDO('mysql:host='.$BDD_hote.';dbname='.$BDD_nmDB, $BDD_user, $BDD_pass);
// On récupère ce que l'utilisateur à saisi, si il n'a rien saisi (login ou mot de passe) on le renvoi sur la page de
création de compte
if(isset($_REQUEST['login']) && isset($_REQUEST['password']))
{
// Le formulaire précédent a été bien rempli
// On prépare la requète SQL pour enregistrer l'utilisateur
$requete="INSERT INTO `MonSite`.`users` (`id`, `login`, `password`) VALUES (NULL, '".
$_REQUEST['login']."', '".md5($_REQUEST['password'])."');";
// Ici md5 permet de crypter le mot de passe et de le stocker crypté dans la base de données
// On exécute la requete grace à la fonction sql présente dans le fichier fonctions.php
sql($requete);
// On prévient que le compte à bien été créé
echo "Compte ajouté a la base";
// On pourrait aussi renvoyer vers une page de confirmation par
// header("location : confirmation.html");
}
else
{
// Le formulaire n'est pas complet
// On renvoit vers la page précédente
header("location : add_user.html");
}
?>
Pour tester notre ajout de compte il suffit d'aller dans un navigateur à l'adresse
http://ipduserveur/monsite/add_user.html, d'ajouter un compte puis de vérifier grace à phpmyadmin si nous avons bien
un nouvel utilisateur dans notre table users.
Maintenant que nous avons pu ajouter un compte à notre base « users », nous allons pouvoir créer notre fichier auth.php
qui se chargera de comparer les informations saisies par l'utilisateur et les informations saisies dans la base de données.
Fichier auth.php
<?
//On prépare l'utilisation des variables de fonctions (variable qui sont stockées sur le serveur pour chaque
session ouverte)
session_start();
// Fichier auth.php
// On intègre les informations de connexion à la base de données ainsi que le fichier (ou librairie
fonctions.php)
include("conf.site");
include("fonctions.php");
// On intialise la connexion à la base de données
$bdd = new PDO('mysql:host='.$BDD_hote.';dbname='.$BDD_nmDB, $BDD_user, $BDD_pass);
// On récupère ce que l'utilisateur à saisi, si il n'a rien saisi (login ou mot de passe) on le renvoi sur la page de
création de compte
if(isset($_REQUEST['login']) && isset($_REQUEST['password']))
{
// Si l'utilisateur à rempli tous les champs on vérifie ce qu'il à saisit
// En recherchant dans la base de donner, un login et un mot de passe crypté correspondant à ce qu'il
à saisi.
// Si on a pas de réponse, alors il y a une erreur d'authentification
// Sinon l'utilisateur a réussi à s'authentifier
Enfin pour protéger une page d'un site il nous suffira de vérifier en haut de chaque page si nous avons une session
ouverte ou pas pour le site à l'aide du code suivant :
<?
session_start();
if(!isset($_SESSION['auth']))
{
header("location:auth.html");
}
?>
Ce code en haut de chaque page vérifie si nous avons une session web ouverte sur le serveur avec notre variable de
session, sinon il nous renvoit directement sur la page d'authentification.
Il faut rajouter ce morceau de code sur la page add_user.html ainsi que tout en haut de add_user.php.