Système d'autorisation

Vidéo sur Youtube Le play Youtube

Nous allons maintenant créer un système d'autorisation. Seules les utilisateurs enregistrés pourront avoir accès à toutes les données.

Modifier le fichier index.php !

Dans le fichier index.php, modifiez la ligne 55 et remplacez index.php par sql.php qui est le nom de notre fichier qui gèrera les connexions à la base de données.

<!DOCTYPE html>
<html lang="fr">
<head>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Projet Injection SQL</title>
    <style>

        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f0f0f0;
            text-align: center;
        }

        h1 {
            text-align: center;
            margin-top: 50px;
        }

        div {
            width: 300px;
            margin: 0 auto;
            padding: 20px;
            background-color: #fff;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        label {
            display: block;
            margin-bottom: 5px;
        }

        input {
            width: 90%;
            padding: 5px;
            margin-bottom: 10px;
            border: 1px solid #ccc;
            border-radius: 3px;
        }

    </style>

</head>

<body>

    <h1>Tester l'injection SQL</h1>

    <div>

        <form action="sql.php" method="post">

            <label for="username">Nom d'utilisateur</label>
            <input type="text" name="username" id="username">
            <label for="password">Mot de passe</label>
            <input type="password" name="password" id="password">
            <input type="submit" value="Se connecter">
            
        </form>

    </div>

</body>

</html>

Ainsi, le formulaire sera directement connecté au bon fichier.

Modifier le fichier sql.php

Utiliser dump

Nous allons utiliser le système dump pour afficher les résultats d'une manière élégante.

<?php

require_once ('vendor/autoload.php');

Récupérer les informations transmises par le formulaire

Nous allons à présent récupérer les données transmises par le formulaire via la méthode POST.

<?php

require_once ('vendor/autoload.php');

// Récupérer les données du formulaire
$user = $_POST['username'] ?? null;
$pass = $_POST['password'] ?? null;

Voilà qui est fait ! 😉

Se connecter à la base de données avec PHP

Nous allons utiliser plusieurs variables PHP qui nous permettront d'enregistrer les informations de connexion. Ensuite, nous nous connecterons à la base de données.

<?php

require_once ('vendor/autoload.php');

// Récupérer les données du formulaire
$user = $_POST['username'] ?? null;
$pass = $_POST['password'] ?? null;

// Informations de connexion à la base de données
$servername = "database";
$username = "henrique";
$password = "CqIEuocUkTClfJyzVfOYcKAzbrHFqH";
$dbname = "injectionDB";

// Se connecter à la base de données
$db = new mysqli($servername, $username, $password, $dbname);

Les informations correspondent à celles indiquées dans le fichier compose.yml.

Vérification des informations

Il faut vérifier si l'identifiant et le mot de passe sont correctes. Pour atteindre ce but PHP va utiliser une requête SQL qui nous permettra de savoir s'ils sont présents dans la base de données.

<?php

require_once ('vendor/autoload.php');

// Récupérer les données du formulaire
$user = $_POST['username'] ?? null;
$pass = $_POST['password'] ?? null;

// Informations de connexion à la base de données
$servername = "database";
$username = "henrique";
$password = "CqIEuocUkTClfJyzVfOYcKAzbrHFqH";
$dbname = "injectionDB";

// Se connecter à la base de données
$db = new mysqli($servername, $username, $password, $dbname);


// Vérifier si les identifiants sont corrects
$sql = "SELECT * FROM utilisateurs WHERE user = '$user' AND password = '$pass'";
$result = $db->query($sql);
$result = $result->fetch_all();

Si est un résultat est trouvé alors la variables $result ne sera pas vide.

Afficher tous les utilisateurs si la variable $result n'est pas vide

Il nous reste plus qu'à afficher tous les utilisateurs si la variable $result n'est pas vide. Cela équivaut à empêcher ceux qui n'ont pas un identifiant et un mot de passe valide à accéder aux données.

<?php

require_once ('vendor/autoload.php');

// Récupérer les données du formulaire
$user = $_POST['username'] ?? null;
$pass = $_POST['password'] ?? null;

// Informations de connexion à la base de données
$servername = "database";
$username = "henrique";
$password = "CqIEuocUkTClfJyzVfOYcKAzbrHFqH";
$dbname = "injectionDB";

// Se connecter à la base de données
$db = new mysqli($servername, $username, $password, $dbname);


// Vérifier si les identifiants sont corrects
$sql = "SELECT * FROM utilisateurs WHERE user = '$user' AND password = '$pass'";
$result = $db->query($sql);
$result = $result->fetch_all();


// Afficher les utilisateurs si le résultat n'est pas vide
if (count($result) > 0) {
    $sql = "SELECT id, user, password FROM utilisateurs";
    $result = $db->query($sql);
    dump($result->fetch_all());
} else {
    dump('Mauvais identifiants ou mauvais mot de passe !');
}

Comment fonctionne notre application ?

Le fonctionnement de notre application est très simple.

Lorsque qu'un utilisateur indique un bon identifiant et un bon mot de passe, il reçoit la liste de tous les identifiants sinon il reçoit ce message d'erreur : Mauvais identifiants ou mauvais mot de passe !.

Dans la prochaine leçon, nous allons tester notre application.