Browse Source

Ajout du TP2 + mise à jour du TP1

akrah 6 years ago
parent
commit
4c697d5cac
3 changed files with 100 additions and 7 deletions
  1. 1 1
      GITLABSSH.md
  2. 6 6
      TP1.md
  3. 93 0
      TP2.md

+ 1 - 1
GITLABSSH.md

@@ -51,7 +51,7 @@ login@ordi:~$ ls ~/.ssh
 2 - Copier la clé publique dans Gitlab
 --------------------------------------
 
-![](images/sshGitlab.gif)
+*Un GIF illustrant les 8 points suivants est disponible dans `images/sshGitlab.gif`.*
 
 1. Connectez-vous sur Gitlab avec vos identifiants Unistra : https://git.unistra.fr
 2. Cliquez sur l'icône en haut à droite de l'écran

+ 6 - 6
TP1.md

@@ -17,11 +17,11 @@ Exercice 1 - Bonjour
 2. Écrivez un fichier `bonjourGet.php` qui contient la structure de base d'un fichier HTML5 valide.
     - Dans le `<body>`, ajoutez du code PHP qui affiche le contenu de la variable `module` du tableau `$_GET`.
     - Testez avec Postman et votre navigateur, en transmettant ou nom une variable via la méthode `GET`.
-    - Ajoutez un **test** pour vérifier que la variable existe et n'est pas vide. Affichez un message si la condition n'est pas remplit.
+    - Ajoutez un **test** pour vérifier que la variable existe et n'est pas vide. Affichez un message si la condition n'est pas remplie.
     - **Sécurisez** la variable
 
 3. Écrivez un fichier `bonjourPost.php` qui contient la structure de base d'un fichier HTML5 valide.
-    - Dans le `<body>` de `bonjour.php`, affichez le contenu des variables `firstname` et `lastname` du tableau `$_POST`
+    - Affichez le contenu des variables `firstname` et `lastname` du tableau `$_POST` dans le `<body>`
     - Testez avec Postman en transmettant 0, 1 ou les 2 variables via la méthode `POST`
     - Ajoutez le test d'existence des deux variables et **sécurisez-les**.
 
@@ -34,13 +34,13 @@ Exercice 2 - Générer une liste
 ------------------------------
 
 1. Écrivez un fichier PHP `liste.php` qui produit un document HTML contenant
-**une liste de 10 items** générés en PHP avec une boucle `for`. Testez avec Postman et votre navigateur. Pensez à ajouter un test pour vérifier que votre variable est un entier et transtypez-la (cast).
+**une liste de 10 items** générés en PHP avec une boucle `for`. Testez avec Postman et votre navigateur.
 
 2. Écrivez un fichier PHP `listeGet.php` similaire à `liste.php`, où le
-nombre d'items à générer est disponible dans **la variable `nbItems` du tableau `$_GET`**. Testez avec Postamn et un navigateur.
+nombre d'items à générer est disponible dans **la variable `nbItems` du tableau `$_GET`**. Testez avec Postman et un navigateur. Pensez à ajouter un test pour vérifier que votre variable est un entier et transtypez-la (cast).
 
 3. Écrire un fichier PHP `listePost.php` similaire à `liste.php`, où le
-nombre d'items à générer est disponible dans **la variable `nbItems` du tableau `$_POST`**. Testez avec Postamn.
+nombre d'items à générer est disponible dans **la variable `nbItems` du tableau `$_POST`**. Testez avec Postman.
 
 4. Tester le 3. avec votre navigateur. Pour cela, créez un fichier PHP contenant un **formulaire** avec `listesPost.php` pour action.
 
@@ -65,7 +65,7 @@ Exercice 3 - Compteur de visites en session
 
 4. Dans Postman ou votre navigateur, supprimez le cookie de session `PHPSSID` puis rechargez la page. Que se passe-t-il ?
 
-5. Réalisez un schéma comportant un navigateur, un serveur web et un module PHP. Présentez à l'aide de flèches et de numéros la série de requêtes/réponses qui sont échangées lorsque vous cliquez sur le lien ajouté à la question précédente. Pour chaque numéro :
+5. Réalisez un schéma comportant un navigateur, un serveur web et un module PHP. Présentez à l'aide de flèches et de numéros la série de requêtes/réponses qui sont échangées lorsque vous cliquez sur le lien ajouté à la question 3. Pour chaque numéro :
     - expliquer brièvement l'objet de la requête/réponse : qui envoie/réceptionne ?
     - indiquez le contenu de la requête/réponse : entête, corps, variables, etc.
 

+ 93 - 0
TP2.md

@@ -0,0 +1,93 @@
+TP2 - Gestion de comptes utilisateur
+====================================
+
+Créez un répertoire `TP2` contenant les 5 fichiers vides suivants :
+- `signin.php`
+- `authenticate.php`
+- `welcome.php`
+- `signout.php`
+- `users.php`
+
+
+Objectifs
+----------
+
+L'objectif des exercices suivants est de compléter progressivement ces fichiers pour mettre en place un **mécanisme d'authentifications d'utilisateurs**. Attention, ces fichiers **serviront de base pour les TPs sur la POO et les BDD**.
+
+Pour tous les exercices du TP :
+- **vérifiez** et **sécurisez** les variables que l'utilisateur peut modifier
+- envisagez tous les cas de figures possibles (méthodes HTTP) pour accéder à vos pages et **neutralisez** les cas non désirés
+- n'oubliez pas de commiter/pusher régulièrement votre travail sur le dépôt Git pour vous familiariser avec.
+
+
+Exercice 1 : Formulaire de connexion
+------------------------------------
+
+Complétez le fichier PHP `signin.php` pour affichez un document HTML avec un formulaire proposant de s'authentifier à l'aide d'un login et d'un mot de passe.
+
+Ce fichier ne doit contenir **aucun code PHP** (pour le moment).
+
+Exercice 2 : Un fichier comme BDD
+---------------------------------
+
+Pour ce TP, la base de donnée des utilisateurs sera stockée dans le fichier `users.php` sous la forme d'un tableau associatif `$users` contenant des couples `'login' => 'mot de passe'`.
+
+Créez ce tableau avec quelques utilisateurs de votre imagination.
+
+Exercice 3 : Authentification
+-----------------------------
+
+*Note* : ce fichier ne comportera aucun code HTML.
+
+Complétez le script PHP `authenticate.php` qui traite la requête HTTP POST du formulaire `signin.php` comme suit :
+
+1. Il demande une redirection vers le fichier `signin.php` si la méthode HTTP utilisée n'est pas POST.
+1. Il inclut le fichier `users.php`.
+2. Il vérifie que le tableau `$users` contient le login transmis en POST. Regardez la documentation de [array_key_exists](https://www.php.net/manual/fr/function.array-key-exists.php)
+3. Si le login existe, il vérifie que le mot de passe passé en POST correspond au mot de passe du tableau `$users`.
+3. Si les mots de passe correspondent :
+    - une session est créée
+    - le login est sauvegardé dans le tableau de session
+    - une demande de redirection vers le fichier `welcome.php` est envoyée
+4. Dans tous les cas d'échec d'authentification, une demande de redirection vers le fichier `signin.php` est envoyée.
+
+
+Exercice 4 : Mon compte
+-----------------------
+
+Complétez le fichier PHP `welcome.php` pour qu'il se comporte ainsi :
+
+1. Si l'utilisateur ne s'est pas encore authentifié, une demande de redirection vers le fichier `signin.php` est envoyée.
+2. Si l'utilisateur est authentifié, ce fichier lui propose un contenu HTML comportant un message de bienvenue personnalisé ainsi qu'un lien de déconnexion vers le fichier PHP `signout.php`
+
+
+Exercice 5 : Déconnexion
+------------------------
+
+Complétez le fichier PHP `signout.php` pour qu'il :
+
+1. efface l'identité de l'utilisateur connecté de la session courante
+2. envoie une demande de redirection vers le fichier `signin.php`
+
+Note : Ce fichier doit contenir **exactement** 3 instructions.
+
+
+Exercice 6 : Messages d'erreur du serveur vers le client
+--------------------------------------------------------
+
+Cet exercice propose de mettre en place un système de messages affichés sur la page `signin.php` pour indiquer à l'utilisateur le problème rencontré par le module PHP.
+
+1. Dans le fichier `authenticate.php`, créez une variable de session `message` qui contiendra un texte relatif aux différents cas de figure rencontrés lors de la tentative d'authentification :
+    - lorsque le login n'existe pas
+    - lorsque le mot de passe est incorrect
+
+2. Dans le fichier `signin.php`, affichez le contenu de la variable de session `message` dans une balise `<section>`, si cette variable existe et n'est pas vide.
+
+
+Pour les plus rapides
+---------------------
+
+- Niveau 1 : Ajoutez un fichier de style CSS pour mettre en forme votre
+formulaire.
+- Niveau 2 : Utilisez [Bootstrap](https://getbootstrap.com) pour mettre en
+forme vos différentes pages.