On va passer au concret et réaliser un premier script PHP.
On a déjà vu tout ce qu'il fallait pour pouvoir protéger le contenu d'une page par mot de passe et c'est ce qu'on va voir ici.
Sommaire
Instructions pour réaliser le TP
Les prérequis
Voici ce dont on va avoir besoin et que l'on a vu :
- Afficher le texte avec
echo
- Utiliser les variables (affectation, affichage…)
- Transmettre des variables via une zone de texte d'un formulaire
- Utiliser des conditions simples (
if
, else
)
L'objectif
Mettre en ligne une page web pour donner des informations confidentielles à certaines personnes. Cependant, pour limiter l'accès à cette page, il faudra connaître un mot de passe.
Pour le TP, les données confidentielles seront les codes d'accès au seveur central de la NASA. Le mot de passe pour pouvoir visualiser les codes d'accès sera kangourou
comment réaliser une page qui n'affiche ces codes d'accès que si on a rentré le bon mot de passe ?
Comment procéder ?
Dabord, un peu de méthode, travailler sur un brouillon.
 |
A quoi doit-on réfléchir sur notre brouillon ? |
- Au problème posé (que veut-on faire ?)
- Au shéma du code (on le découpe en morceaux).
- Aux fonctions et connaissances PHP dont on va avoir besoin.
Problème posé
Protéger l'accès à une page par un mot de passe. La page ne doit pas s'afficher si on n'a pas le mot de passe.
Shéma du code
Pour que l'utilisateur puisse rentrer un mot de passe, le plus simple est de créer un formulaire. Celui-ci appellera la page protégée et lui enverra le mot de passe.
L'accès au contenu de la page ne sera autorisé que si le mot de passe est
kangourou
On doit donc créer 2 pages web :
- formulaire.php, contient un simple formulaire
- secret.php, contient les "codes secrets" mais ne les affiche que si on lui donne le mot de passe.
Connaissances requises
On l' avu au départ dans les prérequis
Correction
La page
formulaire.php
Code PHP
<!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" >
<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="secret.php" method="post">
<p>
<input type="password" 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>
On a pris un champ de type "password" car il s'agit d'un mot de passe.
La page
secret.php
qui sera appelée par le formulaire :
Code PHP
<!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" >
<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>
<?php
if (isset($_POST['mot_de_passe']) AND $_POST['mot_de_passe'] == "kangourou") // Si le mot de passe est bon
{
// On affiche les codes
?>
<h1>Voici les codes d'accès :</h1>
<p><strong>CRD5-GTFT-CK65-JOPM-V29N-24G1-HH28-LLFV</strong></p>
<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>
<?php
}
else // sinon, on affiche un message d'erreur
{
echo '<p>Mot de passe incorrect</p>';
}
?>
</body>
</html>
Dans la page secrète, on vérifie d'abord si on a envoyé un mot de passe (avec
isset
) et si ce mot de passe est bien celui qu'on attend (kangourou).
Si ces deux conditions sont remplies, on peut afficher les codes d'accès.
 |
Comme on le voit, on n'a pas fait un echo pour afficher tout le texte. Quand il y a beaucoup de texte à afficher, il est préférable de fermer les balises PHP après l'accolade du if , c'est plus simple et plus lisible.
En revanche, dans le cas du else comme il n'y a qu'une petite phrase à afficher, on a choisi de l'afficher avec un echo . |
 |
Cette protection est-elle efficace ? |
Oui, à condition de ne pas avoir un mot de passe comme "kangourou" mais de prendre un mot de passe digne de ce nom. Il doit être long avec majuscules, minuscules, chiffres et qui a peu de chance d'être trouvé par hasard. Exemple : f2tyzP3ZDgt4
Aller plus loin
Si on veut, il est possible de réaliser ce TP en une seule page au lieu de deux.
Il faut pour cela que le formulaire, sur la page
formulaire.php
, s'appelle lui-même. Autrement dit, l'attribut
action
du formulaire serait
action="formulaire.php"
. Cela voudrait dire que les données seraient renvoyées sur la même page :
Dans ce mode de fonctionnement, la page
formulaire.php
contiendrait à la fois le formulaire et le message secret.
 |
Comment peut-on faire ? Est-ce sécurisé ? |
Cela peut être fait de façon sécurisé, c'est juste un peu plus difficile à imaginer.
Il faut construire le code de la page
formulaire.php
en 2 grandes parties :
- Si aucun mot de passe n'a été envoyé (ou s'il est faux) : afficher le formulaire
- Si le mot de passe a été envoyé et qu'il est bon : afficher les codes secrets
Toute la page PHP sera donc architecturée autour d'un grand
if
qui porrait ressembler à quelque chose comme ça :
Code PHP
<?php
// le mot de passe n'a pas été envoyé ou n'est pas bon
if (isset($_POST['mot_de_passe']) OR $_POST['mot_de_passe'] != "kangourou")
{
// Afficher le formulaire de saisie du mot de passe
}
// le mot de passe a été envoyé et il est bon
else
{
// Afficher les codes secrets
}
?>
Ce sont les grandes lignes de comment on fait. A chaque fois que la page
formulaire.php
est appelée, elle détermine (grâce au
if
) si on l'appelle pour afficher la partie secrète ou si on l'appelle pour afficher le formulaire de saisie du mot de passe.
Ce qui se passera alors :
- La première fois que le visiteur charge la page
formulaire.php
, aucune donnée POST n'est envoyée à la page. C'est donc le formulaire qui s'affiche.
- Une fois qu'on a envoyé le formulaire, la page
formulaire.php
est rechargée et cette fois elle reçoit les données POST qu'on vient d'envoyer. Elle peut donc les analyser et, si le mot de passe est bon, elle affiche les codes secrets.
 |
On pourrait même aller plus loin, car on n'a pas prévu le cas pour afficher "Mot de passe incorrect".
Cela peut se faire facilement en découpant la page en 3 à l'aide d'un elseif : formulaire, mot de passe incorrect, codes secrets. |