Découvrir Java pour le web

Comprendre les filters et les listeners

Testez gratuitement nos 1298 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Interceptez et filtrez les informations destinées à une ou à plusieurs servlets. Il s'agit notamment d'utiliser les filtres.
06:23

Transcription

Nous allons maintenant nous focaliser sur l'un des deux types d'objets proposés, à savoir les filtres. Le concept de filtre va nous permettre d'intercepter toutes les requêtes qui sont faites à nos servlets ou notre servlet sur une URL bien précise, ou sur plusieurs URLs, de façon à effectuer un traitement, une transformation de la requête en vue de son traitement par la servlet ou éventuellement une transformation de la réponse. Prenons un exemple. Nous avons dû vérifier dans notre servlet que le paramètre passé était correct pour éviter éventuellement une faille de sécurité en XSS. on a utilisé « nettoyer » pour vérifier qu'il n'y avait pas de caractères et de tentative d'induction de « » ou « » pour induire du script. On peut vouloir systématiquement filtrer toutes les requêtes qui contiennent un caractère interdit de façon à éviter qu'une servlet qui aurait été codée un peu rapidement n'expose l'intégralité du site à cette faille XSS. Il est vrai que ce choix est un peu radical mais nous verrons par là les possibilités qu'on a avec les filtres. Pour créer un filtre dans notre projet il suffit de choisir « Filter » ici. Ce filtre, on va l'appeler « AntiXss ». Comme je le disais, c'est un peu radical. « Filter ». On va réutiliser le package utilisé jusqu'à maintenant. Toujours dans la partie web puisque c'est un objet qui correspond à la partie web de notre site. On va encore utiliser les annotations mais on pourrait aussi déclarer notre filtre au niveau du « web.xml ». Au niveau de Tomcat, son nom sera celui-là. Il s'applique à tous les chemins mais je pourrais éventuellement ne filtrer qu'une partie du site. Une partie sensible, ou une partie qui n'a pas besoin des « < » ou « » dans les paramètres de requête. Ici, je filtre tout avec mon filtre. Pas de paramètres d'initialisation, je n'en ai pas besoin. Je peux terminer. J'ai un filtre qui a été généré qui est très conséquent en termes de code. Je n'ai pas besoin de l'essentiel du code généré. Donc je vais quasiment tout supprimer. J'ai besoin pour écrire un filtre de redéfinir trois méthodes : « doFilter », « init » et « destroy ». Le contenu de « doFilter » on va l'écrire. On n'a pas besoin du contenu généré. Le « init » et le « destroy ». Le « destroy » est ici. Le « init » est en-dessous. Pareil ici, pas de besoin de l'utilisation de la configuration puisque je n'en ai pas. Et l'« Override » qui n'a pas été rajouté par l'assistant donc on va le faire ici. Le filtre. Le « Override » ici. On a ici le minimum syndical d'un filtre, c'est-à-dire la méthode « doFilter » redéfinie que je vais remplir, la méthode « destroy » et « init » que je vais laisser vide. Je n'ai pas besoin d'initialisation spécifique ou de destruction spécifique. Le filtre est écrit en inspectant la requête pour voir si je n'ai pas un caractère interdit. Je passe en revue l'ensemble des valeurs de mes paramètres. Pour chaque valeur de paramètre, je vais inspecter cette valeur avec une expression régulière qui s'inspire de ce que j'avais mis dans « nettoyer ». Ici, tout caractère qui n'est pas « < », « », « ' », « " ». Ici, « & ». J'ai beaucoup trop de « \ ». Ici, un « \ ». Bien-sûr ça c'est un caractère dans toute la chaîne donc il faut que ce soit n'importe où dans la chaîne. Donc tout caractère autour peut être présent. Si j'ai ça, je peux considérer cette chaîne comme dangereuse donc je peux positionner un « = true ». Cette requête est dangereuse puisqu'elle contient un caractère interdit. Bien-sûr il faut que je déclare « dangereux ». Par défaut ma requête n'est pas dangereuse tant que je n'ai pas inspecté tous les paramètres. Si ce n'est pas dangereux je peux transmettre cette requête. Si c'est dangereux, je choisis de filtrer complètement, de ne pas transmettre la requête. C'est un peu extrême. Je pourrais mettre un message d'erreur, quelque chose comme ça. C'est vraiment pour avoir un aperçu des possibilités d'un filtre. Ici, en faisant « chain.doFilter » je transmets à l'ensemble des autres filtres ou, s'il n'y en a pas, à la servlet qui était demandée par l'utilisateur, la requête, et je récupère la réponse. On peut donc maintenant tester notre filtre. Si je fais une requête avec un paramètre « anonym » cette requête est transmise. Par contre si jamais j'ai un caractère interdit je n'ai carrément aucun appel à la servlet qui est effectué et ça s'applique sur tout mon site. Si jamais j'avais un paramètre ici sur l'index cette requête n'est pas transmise non plus. Donc les filtres sont un bon moyen d'intercepter, pas forcément de sécuriser, parce que c'est un peu extrême, mais c'est un moyen d'intercepter toutes les requêtes. Ça peut être aussi tout simplement pour mesurer les performances du site, on peut, en entrée et en sortie de la chaîne, mesurer le temps écoulé entre avant le « doFilter » et après.

Découvrir Java pour le web

Développez une application web avec Java. Apprenez à écrire des servlets, des entités ​J​PA (Java Persistence API) d'accès aux données et des pages JSP (Java Server Pages).

2h06 (23 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Votre/vos formateur(s) :
Date de parution :25 janv. 2017
Durée :2h06 (23 vidéos)

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !