Compte Rendu TP4 : Authentification MySQL

PROSPER MATHIEU - MMI2-B2

note: les visuels des codes fournis ne sont pas sous forme de capture d'ecran mais sous forme de texte directement pour une meilleur lisibilité

Exercice 4 : Base de Données

Objectifs : Structurer la base de données pour accueillir deux types d'utilisateurs distincts (Admins et Users).

Approche : Utilisation de phpMyAdmin pour créer deux tables avec des champs identiques (ID, login, mot de passe) et insertion de jeux de données de test.

Code SQL & Structure

CREATE TABLE admins (
    id_admin INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    login_admin VARCHAR(50),
    pwd_admin VARCHAR(50)
);

CREATE TABLE users (
    id_user INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    login_user VARCHAR(50),
    pwd_user VARCHAR(50)
);

INSERT INTO admins (login_admin, pwd_admin) VALUES ('admin', '1234');
INSERT INTO users (login_user, pwd_user) VALUES ('user', '1234');

Résultat

Interface phpMyAdmin
Fonctionnement : La séparation en deux tables permet de cloisonner physiquement les données des administrateurs et des utilisateurs classiques, simplifiant la gestion des privilèges lors de la connexion.

Exercice 5 : Fichier de Connexion

Objectifs : Créer un script réutilisable pour établir la communication avec le serveur MySQL.

Approche : Définition de constantes pour les paramètres de connexion et utilisation de l'API mysqli.

Code Source (connexion.php)

<?php

// Tentative de connexion au serveur MySQL
$bdd = mysqli_connect('localhost', 'mathieuprosper_Admin', 'x_Sz6VY_u[N%', 'mathieuprosper_Ben_Amor');

// Vérification de l'état de la connexion
if (!$bdd) {
    die('Erreur de connexion');
}
?>

Exercice 6 : Script de Login

Objectifs : Traiter le formulaire de connexion, vérifier les identifiants en base et rediriger l'utilisateur.

Approche : Récupération des données POST, requête SQL conditionnelle selon le type d'utilisateur, et initialisation de la session en cas de succès.

Code Source (login.php)

<?php
session_start();
// Nettoyage des sessions précédentes si elles existent
if (isset($_SESSION['id_admin']) || isset($_SESSION['id_user'])) {
    session_destroy();
}

if ($_POST) {
    require_once 'connexion.php';
    extract($_POST);

    // Construction de la requête selon le rôle sélectionné
    if ($type_user == "admin") {
        $sql = "SELECT * FROM admins WHERE login_admin='$user_name' AND pwd_admin='$password'";
    } else {
        $sql = "SELECT * FROM users WHERE login_user='$user_name' AND pwd_user='$password'";
    }

    $resultat = mysqli_query($bdd, $sql);

    if ($resultat) {
        // Vérification si une ligne correspond aux identifiants
        if (mysqli_num_rows($resultat) == 0) {
            echo 'Utilisateur ou mot de passe incorrect !!';
        } else if ($type_user == "admin") {
            // Création session Admin et redirection
            $row = mysqli_fetch_assoc($resultat);
            $_SESSION['id_admin'] = $row['id_admin'];
            $_SESSION['login_admin'] = $row['login_admin'];
            header('Location: admin_page.php');
            exit();
        } else {
            // Création session User et redirection
            $row = mysqli_fetch_assoc($resultat);
            $_SESSION['id_user'] = $row['id_user'];
            $_SESSION['login_user'] = $row['login_user'];
            header('Location: user_page.php');
            exit();
        }
    }
}
?>

Résultat

Page Admin sécurisée
Fonctionnement : Le script interroge la base de données. Si mysqli_num_rows renvoie 1, l'utilisateur est authentifié. Les variables de session sont alors initialisées pour persister l'état "connecté" sur les autres pages.

Exercice 7 : Pages Sécurisées

Objectifs : Empêcher l'accès direct aux pages admin_page.php et user_page.php sans authentification préalable.

Approche : Vérification de l'existence de la variable de session spécifique au début du script. Si elle est absente, redirection forcée.

Code Source (admin_page.php)

<?php
session_start();

// Vérification de sécurité : Est-ce un admin ?
if (!isset($_SESSION['id_admin'])) {
    // Si non, redirection vers le login
    header('Location: login.php');
    exit();
}

echo 'Bienvenue Admin : ' . $_SESSION['login_admin'];
?>

Résultat

Page Admin sécurisée
Fonctionnement : La fonction isset() agit comme un garde-fou. Elle garantit que seul un utilisateur ayant passé avec succès l'étape de login (et donc ayant une session active) peut visualiser le contenu protégé.