TP Sécurité des applications web Objectifs Préparer les
Transcription
TP Sécurité des applications web Objectifs Préparer les
TP Sécurité des applications web Author : Cedric Dumoulin Date : 18 déc. 2012 Rev : 5 Jan. 2016 Objectifs Dans ce TP vous allez apprendre à sécuriser une application web et EJB. Le TP est composé de plusieurs parties, chacune proposant de traiter un problème particulier de sécurité. Dans ce TP, nous allons écrire une application composée de: Une page menu, qui proposera un lien sur chaque page suivante. Une page destinée aux vendeurs Une page destinée aux clients enregistrés Une page accessible par tous Le site suivant peut vous être utile: https://docs.oracle.com/javaee/7/tutorial/security-intro005.htm ou http://docs.oracle.com/javaee/6/tutorial/doc/bnbxj.html#bnbxr Préparer les pages Pour commencer, il vous faut un projet web dynamique contenant les pages précédemment citées. Vous pouvez créer ce projet, ou partir de l'archive ipint.gf.security.web.zip. Dans ce projet, vous devez avoir la structure suivante: Structure de départ du projet Changez les titres et mettez un message différent dans chaque page. La page d'index contient des liens vers les autres pages. Sécuriser les pages web Notre site est accessible par trois type de rôles : vendor - permet d'accéder aux pages placées dans le répertoire 'vendor' client - permet d'accéder aux pages placées dans le répertoire 'client' admin - permet d'accéder à toutes les pages de tout les répertoires Modifiez votre site afin de pouvoir prendre en compte ces rôles. Vous devez: déclarer les rôles (web.xml) déclarer les zones protégées (web.xml) déclarer la forme de login (web.xml) déclarer des utilisateurs, les affecter à des groupes (serveur, console d'admin ou fichier .properties) déclarer le mapping role <-> groupe, ou spécifier "mapping direct" au niveau du serveur. Définir les utilisateurs et les rôles dans un fichier Il faut définir un certain nombre d'utilisateur, et leur affecter des groupes. Dans un premier temps, nous utilisons des fichiers d'utilisateur et groupes. Déclaré vos utilisateurs et vos groupe. La façon de déclarer dépend du serveur que vous utilisez. Reportez vous au cours. Définir sa propre page de login Vous pouvez modifier l'application afin de fournir votre propre page de login, au lieu du popup du navigateur. Reportez vous au cours afin de voir comment fournir votre propre page de login Rediriger les exception vers des pages prédéfinies Ceci ne fait pas vraiment partie de la sécurité mais est très utile pour rediriger les exceptions dues aux erreurs déclenchées par la sécurité. La sécurité déclenche des erreurs de type 403 et 404. Modifiez votre web.xml afin d'utiliser une page appropriée pour afficher le message d'erreur. <error-page> <error-code>401</error-code> <location>/error/logonCanceled.jsp</location> </error-page> Page jsp avec parties dépendants du rôle de l'utilisateur Modifiez la page de menu, afin de ne montrer que les menus (ou liens) réellement accessible à l'utilisateur en fonction de ses droits. Sécuriser les méthodes des beans Vous allez maintenant créer un nouveau projet (ipint.security.domain) avec un bean session. Ce bean aura 3 méthodes retournant "Hello the world!": sayHelloVendor() sayHelloClient() sayHello() L'objectif est de restreindre l'accès de chacune de ces méthodes aux rôles correspondant. Modifiez votre application afin que la page associé à un rôle affiche le résultat de l'appel à la méthode correspondante du bean. Vous pouvez passer par un contrôleur Spring. Ecrire dans une méthode une dépendant du rôle de l'utilisateur partie conditionnelle Vous allez ajouter à votre bean une méthode showRoleName() : String qui renvoie une chaine indiquant les rôles de l'utilisateur. Cette méthode doit donc tester les rôles de l'utilisateur, et construire la réponse (chaine de caractères). Modifiez la page d'accueil afin d'afficher le résultat de l'appel de cette méthode Définir les utilisateurs et les rôles dans une base de données Il est possible de définir les utilisateur et les rôles dans une base de données plutôt que dans des fichiers. Il faut pour cela définir une table d'utilisateurs et une table de groupe, puis indiquer au serveur d'utiliser ces tables pour authentifier les utilisateurs. Normalement, vous n'avez pas de changement a faire dans l'application. Recherchez une solution sur le net, et mettez la en œuvre dans votre TP, ou sur votre projet transversal.