Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Officiels > Site Web > Lecture du tutoriel

TP : page protégée par mot de passe

Avatar
Auteur : M@teo21
Créé : le 16/08/2005 03:08:18
Modifié : le 03/07/2008 11:04:30
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Bienvenue dans votre premier TP (Travaux pratiques) !
Ceci n'est pas un chapitre comme un autre, vous n'allez rien apprendre de nouveau. Mais pour la première fois, vous allez pratiquer pour de bon et réaliser votre premier script PHP ! :D

Le but de ces TP est de vous montrer à quoi peut servir tout ce que vous venez d'apprendre. Quand vous lisez un chapitre, vous êtes parfois dans le flou, vous vous dites "Ok, j'ai compris ce que tu veux me dire, mais je vois vraiment pas où tu veux en venir : comment je peux faire un site web avec tout ça ?".
Maintenant, place au concret ! ^^

Et, bonne surprise, vous avez déjà le niveau pour protéger le contenu d'une page par mot de passe ! C'est ce que je vais vous apprendre à faire dans ce chapitre.

Comme c'est votre premier TP, il est probable que vous vous plantiez lamentablement (vous voyez, je ne vous cache rien ^^ ). Vous aurez envie de vous pendre ou de vous jeter par la fenêtre, c'est tout à fait normal.
Je connais peu de monde qui peut s'être vanté d'avoir réussi du premier coup son premier script PHP. Ne vous découragez pas donc, essayez de suivre et de comprendre le fonctionnement de ce TP, et ça ira déjà mieux au prochain TP ;)
Chapitre précédent Sommaire Chapitre suivant

Réalisation de la page protégée par mot de passe

Etape 1 : prérequis



En règle générale, il faut avoir lu tous les chapitres qui précèdent le TP pour bien le comprendre. Voici la liste des connaissances dont on a besoin pour réaliser ce TP :
Si un de ces points est un peu flou pour vous (vous avez peut-être oublié), n'hésitez pas à relire le paragraphe qui correspond, vous en aurez besoin pour traiter convenablement le TP.
Vous remarquerez que ce TP ne nécessite pas de maîtriser des choses bien compliquées. Pour un premier TP, on fait simple et court :)

Etape 2 : préparation du script



Pour bien faire son script, je recommande toujours de travailler d'abord au brouillon (vous savez, avec un stylo et une feuille de papier ;) ). Ca peut paraître bien souvent une perte de temps, mais c'est tout à fait le contraire. Si vous vous mettez à écrire des lignes de code au fur et à mesure, ça va être à coup sûr le bazar. Tandis que si vous prenez 5 minutes pour y réfléchir devant une feuille de papier, votre code sera mieux structuré et vous éviterez de nombreuses erreurs (qui font perdre du temps :p ).

A quoi doit-on réfléchir sur notre brouillon ?
  1. Au problème que vous vous posez (qu'est-ce que je veux arriver à faire ?)
  2. Au schéma du code, c'est-à-dire que vous allez commencer à le découper en plusieurs morceaux, eux-mêmes découpés en petits morceaux (c'est plus facile à avaler :lol: ).
  3. Aux fonctions et aux connaissances en PHP dont vous allez avoir besoin (pour être sûr que vous les utilisez convenablement).
  4. Aux variables que vous allez utiliser, c'est-à-dire au nom que vous allez leur donner.

Et pour montrer l'exemple, nous allons suivre cette liste pour notre TP :
  1. Problème posé : vous avez créé une page web qui contient des informations ultra-confidentielles (les codes d'accès au serveur central de la NASA par exemple :p ), et vous voulez la protéger par mot de passe pour que seuls vous et vos amis puissent y accéder. Sans le mot de passe, on ne doit pas pouvoir afficher la page.
  2. Schéma du code : tout d'abord, on ne doit travailler que sur une seule page.
    Cette page affiche au départ une zone de texte pour rentrer le mot de passe. Si le mot de passe est bon, on affiche les informations confidentielles. Sinon, on propose à nouveau de rentrer le mot de passe (vous sentez déjà venir les conditions, n'est-ce pas ? ;) )
    On va dessiner un schéma pour éclaircir tout ça :

    Image utilisateur

    Vous vous attendiez peut-être à plus compliqué... D'ailleurs vous auriez certainement fait quelque chose de plus compliqué (pour rien). Ce que je vous présente là, c'est le code simplifié au maximum. Vous allez voir qu'il n'y a pas besoin de faire plus que cette simple condition.
    Si ça vous paraît TROP simple, attendez de voir la suite et vous allez rapidement comprendre qu'on peut faire simple et efficace.
  3. Fonctions et connaissances requises : voir les prérequis plus haut (on les a déjà énoncés).
  4. Variables nécessaires : à votre avis, de combien de variables va-t-on avoir besoin ? 4 ? 5 ? 10 ?

    Que nenni ! Une seule ! Une seule variable est nécessaire pour réaliser ce script ! :D
    Vous avez deviné de laquelle il s'agit ? Ca me paraît assez évident : on va avoir besoin d'une variable qui stocke le mot de passe entré.

    Bon, maintenant faut lui trouver un nom. Vous vous dites probablement que ce n'est qu'un "détail", après tout elle peut s'appeler $supervariable, $thelostpassword, $tutrouverasjamaislemotdepasse... Dans tout les cas ça marche aussi bien et le résultat est le même.
    Oui, mais le code lui ne sera pas le même. Et s'il y a une chose à laquelle fait attention un programmeur, c'est la qualité de son code. Il choisit judicieusement le nom de ses variables et il met des commentaires (beaucoup de commentaires) pour qu'il puisse reprendre son travail plus tard sans être totalement noyé dans son propre code.

    Evitez à tout prix les noms ambigus de type $temp, $sr07686 etc etc... N'hésitez pas à utiliser des noms longs mais compréhensibles. Et des noms en français tant qu'à faire (on a déjà assez de mots-clés en anglais comme ça :p ).
    Dans notre cas, je propose $mot_de_passe (les underscores _ remplacent les espaces). Les noms à éviter ici seraient par exemple : $pass, $password. Certes, ils sont plus courts, mais $mot_de_passe est vraiment le plus clair et vous vous repérerez mieux dans votre code ainsi.

    Mais attention, n'oubliez pas qu'on va récupérer d'abord une variable à partir d'un formulaire.
    Vous vous souvenez qu'il y avait un préfixe à mettre ? Si votre champ de texte s'appelle mot_de_passe, il y aura donc une variable $_POST['mot_de_passe'] qui sera automatiquement créée dès que l'utilisateur aura entré un mot de passe.

Un dernier problème : la première fois que vous chargerez la page, il faudra vérifier si la variable $_POST['mot_de_passe'] existe sinon vous risquez d'avoir une erreur. En effet, si vous demandez à PHP si la variable vaut "toto", mais que la variable n'existe pas, ça affichera une erreur !

Il y a donc 2 cas possibles :

Comment vérifier si $_POST['mot_de_passe'] existe ? Il va falloir utiliser la fonction isset de PHP qui vaudra true (vrai) si la variable existe, ou false (faux) si elle n'existe pas.
En utilisant la méthode "courte" que je vous ai enseignée dans le chapitre précédent (à propos des booléens), ça nous donne : if (isset($_POST['mot_de_passe']))
{
// Alors on peut vérifier si le mot de passe est bien "toto" par exemple
}

Voilà ! Notre préparation est terminée, on peut maintenant passer au code :)

Etape 3 : à vous de jouer !



On a préparé le terrain ensemble, maintenant vous savez tout ce qu'il faut pour réaliser le script !

Vous êtes normalement capables de trouver le code à taper par vous-mêmes, et c'est ce que je vous invite à faire. Ca ne marchera probablement pas du premier coup, mais ne vous en faites pas : ça marche jamais du premier coup ! :lol:

Bon, allez un peu de sérieux, hop hop hop ! On lance WAMP, son bloc-notes (ou mieux, son Notepad++, son Dreamweaver ou autre éditeur de texte qui colore le code PHP), et on se met à coder !
Basez-vous sur le schéma que je vous ai donné plus haut. Si vous le respectez scrupuleusement, je peux vous assurer que ça marche.

Vous aurez besoin d'inventer un mot de passe, je vous laisse libres de choisir celui que vous voulez.

Bon code ! ^^

Etape 4 : correction



Maintenant, on corrige !
Vous ne devriez lire cette partie que si vous avez terminé votre travail (pour le comparer au mien), ou si vous êtes complètement bloqué. Si jamais vous êtes bloqué, ne regardez pas toute la correction d'un coup. Regardez juste la section qui vous pose problème et essayez de continuer sans la correction.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
// J'ai choisi le mot de passe "kangourou"
if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
    // On se crée une variable $mot_de_passe avec le mot de passe entré
    $mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
    $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}
 
if ($mot_de_passe == "kangourou") // Si le mot de passe est bon
{
// On affiche la page cachée.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Codes d'accès au serveur central de la NASA</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
        <h2>Voici les codes d'accès :</h2>
        <h3>CRD5-GTFT-CK65-JOPM-V29N-24G1-HH28-LLFV</h3>
        
        <hr />
        
        <p>
        Cette page est réservée au personnel de la NASA. N'oubliez pas de la visiter régulièrement car les codes d'accès sont changés toutes les semaines.<br />
        La NASA vous remercie de votre visite.
        </p>
    </body>
</html>
<?php
}
else // le mot de passe n'est pas bon
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Page protégée par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
<p>Veuillez entrer le mot de passe pour obtenir les codes d'accès au serveur central de la NASA :</p>
<form action="protection.php" method="post">
<p>
<input type="text" name="mot_de_passe" /> <input type="submit" value="Valider" />
</p>
</form>
<p>Cette page est réservée au personnel de la NASA. Si vous ne travaillez pas à la NASA, inutile d'insister vous ne trouverez jamais le mot de passe ! ;-)</p>
    </body>
</html>
<?php
} // Fin du else
// Fin du code :)
?>


Alors, ça vous plaît ? :D
Vous aurez beau chercher, on ne peut pas afficher la page cachée tant qu'on n'a pas rentré le bon mot de passe. Vous n'avez qu'à mettre au défi un ami ou un membre de votre famille, il pourra chercher des heures mais il ne verra pas la page cachée s'il n'a pas le bon mot de passe !

Ce code est simple, je ne discuterai pas longtemps dessus. Je souhaite juste préciser 2 ou 3 points sur lesquels vous vous êtes peut-être posés des questions :
Ce qui est génial avec PHP, c'est que la source que l'internaute reçoit ne contient PAS la page cachée ni le mot de passe (essayez de faire Affichage / Source pour voir ce que le client reçoit). Seul le serveur voit tout le code PHP, donc personne ne peut trouver votre mot de passe en trichant !

Alors cette protection est-elle efficace ?
Oui, honnêtement elle l'est. Du moins, elle est efficace si vous mettez un mot de passe compliqué (pas le nom de votre chien, c'est trop facile à trouver ça :D )
Pour moi, un bon mot de passe c'est long, avec plein de caractères bizarres, des majuscules, des minuscules, des chiffres etc etc... Par exemple k7hYTe40Lm8Mf est un bon mot de passe qui a peu de chances d'être trouvé "par hasard".

J'espère que ce premier TP vous a plu :)
J'espère qu'il vous a aussi donné des idées pour de futurs scripts, que vous avez des idées pour l'améliorer etc... Tiens, en parlant d'améliorer, si le mot de passe est mauvais ça serait bien d'afficher un message d'erreur en rouge. Vous êtes capables de le faire d'ailleurs, vous devriez essayer !

Si vous avez besoin d'aide sur ce script ou un autre, je vous rappelle qu'il y a un forum PHP sur ce site, où vous pouvez exposer tous vos problèmes ^^
Chapitre précédent Sommaire Chapitre suivant
Auteur : M@teo21
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 87 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.238s (0.2259s)