• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 19/03/2024

Entraînez-vous à identifier les failles d'une application web

À vous de jouer

Vous êtes le RSSI de la chaîne de restauration Eat Them All. Elle emploie 400 collaborateurs et bénéficie d’un rayonnement national grâce à l’implantation de 15 restaurants dans les principales villes françaises.

Le comité de direction de l’entreprise a décidé de rénover l’application utilisée pour la gestion des absences programmées et exceptionnelles du personnel de la chaîne (réunions, congés, maladie ou formations).

Votre rôle

L’élaboration de l’application, développée par les équipes IT internes, arrive au stade de vérification du respect des exigences de sécurité. En tant que RSSI de l’entreprise, il vous revient d’expertiser le code source et notamment de vérifier que l’interface de connexion respecte bien les normes en vigueur.

Code source

Le code source à expertiser est le suivant :

<!DOCTYPE html>
<?php
    session_start();
?>

<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Bienvenue dans l’application de gestions des absences</title>
</head>
<body>

<?php
    $message='';
    if (empty($_POST['identifiant']) || empty($_POST['password']) ) {
    $message = '<p>Vous devez remplir tous les champs</p>
    <p>Cliquez <a href="./index.php">ici</a> pour essayer de nouveau.</p>';
    }

    else{
        $servername = "localhost";
        $username = "admin";
        $password = "admin";
    
        $conn = mysqli_connect($servername, $username, $password);
        $sql = "SELECT id, name FROM user WHERE identifiant =" + $_POST['identifiant'] + "LIMIT 0,1";
        $result = $conn->query($sql);
    
        if ($result->num_rows > 0) {
            $_SESSION['identifiant'] = $result['identifiant'];
            $message = "<p>Bienvenue" + $result['identifiant'] + "vous êtes maintenant connecté!</p>;";
        }
    
        else{
            $message = '<p>Une erreur d\'authentification s\'est produite ! </p>';
        }

    $conn->close();

    echo $message;
    }
?>

<form id="login" action="index.php">
    <h1>Connexion</h1>
    <fieldset id="information">
        <input id="username" type="text" placeholder="Votre identifiant" autofocus required>
        <input id="password" type="text" placeholder="Votre mot de passe" required>
    </fieldset>
    <fieldset id="action">
        <input type="submit" id="submit" value="Connexion">
    </fieldset>
</form>
</body>
</html>

Livrables attendus

Pour mener à bien cet exercice, faites la liste des failles présentes dans le code source de l’application et proposez des améliorations pour minimiser l’impact des vulnérabilités découvertes.

Identifiez un minimum de 3 failles accompagnées de leurs mesures associées. Ces éléments seront portés dans un document PDF.

Vous n'avez pas besoin de rédiger le code associé aux mesures, mais simplement d’expliquer le type de mesures que vous désirez implémenter (comme vues dans le cours), ainsi que la manière dont elles vont permettre de lutter contre les failles que vous avez détectées.

Vérifiez votre travail

Pour valider cette activité, vous devez vérifier que vous avez bien détecté les éléments suivants :

  • 2 failles à repérer parmi les 3 suivantes :

    • Le mot de passe est transmis en clair (risque de vol de mot de passe) ;

    • Le formulaire est vulnérable à la faille XSS ;

    • Le formulaire est vulnérable aux injections SQL.

  • 2 mesures à implémenter parmi les 3 suivantes (les mesures choisies devront correspondre aux failles détectées) :

    • Pour lutter contre le vol de mot de passe, mettre en place un mécanisme d’authentification basé sur un hachage du mot de base + un sel ;

    • Pour lutter contre la faille XSS, au moins une mesure parmi les 3 suivantes :

      • Proposer une validation stricte des entrées utilisateurs en évoquant la fonction htmlspecialchars() ou équivalent ;

      • Proposer de typer fortement les entrées (identifiant -> type text) ;

      • Proposer l’utilisation des en-têtes de requêtes HTTP CSP ;

    • Pour lutter contre la faille SQL, proposer d’utiliser des requêtes préparées.

Exemple de certificat de réussite
Exemple de certificat de réussite