Activité Premier serveur HTTP - partie 2

Situation

Vous êtes employé par une entreprise de développement spécialisée dans le logiciel en Java sans expérience dans le développement web. La direction a néanmoins accepté un mandat pour la réalisation d’une application web et le travail est en cours. Vous venez d’être intégré à l’équipe de développement et vous devez maintenant vous familiariser avec le framework Javalin. On vous propose de réaliser un livre d’or, c.-à-d. une page où les visiteurs peuvent laisser un message.

Consigne

Lisez les instructions ci-après et réalisez les tâches demandées.

Objectifs

À la fin de ce travail, vous devez :

  1. Être capable d’expliquer en quoi consiste la validation des données côté serveur et pourquoi elle est importante du point de vue de la sécurité.
  2. Connaître la notion de session.
  3. Utiliser la session pour enregistrer les erreurs à afficher sur le formulaire.
  4. Connaître la notion d’injection de code.
  5. Être capable d’expliquer ce qui permet l’injection de code.
  6. Connaître des moyens de prévenir l’injection de code.

Résultat attendu

  • Un bref rapport qui décrit votre travail et votre démarche.
  • Le code source de votre application.

Ressources

Documents :

Logiciel :

  • Machine virtuelle de développement
  • Visual Studio Code
  • Le gestionnaire de dépôts GitLab (gitlab.epai-ict.ch)
  • Le système de contrôle de version git
  • Chrome et Firefox

Démarrage

Récupérer le projet

Lancez Visual Studio Code et connectez-vous à la machine virtuelle de développement. Ouvrez une fenêtre de terminal intégré, rendez-vous dans le répertoire project et lancez la commande ci-après pour récupérer le projet.

1
git clone https://gitlab.epai-ict.ch/m133/activities/guestbook-injection.git

Lancez la commande code -r guestbook-injection pour ouvrir le projet dans la fenêtre courante. Ouvrez ensuite une nouvelle fenêtre de terminal intégré et rendez-vous dans le répertoire data pour créez la base de données (supprimez la base de données existante si néssaire).

1
2
3
4
cd data
mysql -u root -pepai123 -e 'drop database guestbook;'
mysql -u root -pepai123 < guestbook.sql
mysql -u root -pepai123 < test-data.sql

Tâches

  1. Lancez le programme et rendez-vous sur la page http://localhost:8080/guestbook et cliquez sur le bouton du formulaire sans saisir de données. Que constatez-vous ?
  2. Expliquez ce que vous pourriez faire pour éviter que cela puisse se produire.
  3. Dans le formulaire, saisissez un pseudo dans la zone de texte pseudo, puis exactement le texte suivant dans la zone de texte du message. Envoyez les données du formulaire. Vous devriez voir apparaître une boîte de message qui dit "Hello world !" à chaque fois que vous rafraîchissez la page et le message que vous venez d'ajouter est vide.
    1
    
    <script>window.alert('Hello world !');</script>
    
  4. Expliquez pourquoi cela se produit et ce que vous pourriez faire pour éviter que cela puisse se produire.
  5. Dans le formulaire saisissez un pseudo puis exactement le texte suivant dans la zone de texte du message. Que constatez-vous ?
    1
    
    "); DELETE FROM message; -- 
    
  6. Expliquez pourquoi cela se produit et ce que vous pourriez faire pour éviter que cela puisse se produire. Que représentent les caractères "); au début de la chaîne et que représentent les caractères -- à la fin de la chaîne.