Valider vos objets Java contre les attaques XSS , SPEL Injection et LDAP injection

Bonjour à toutes et à tous,

Nous allons parler de la validation de nos objets dans le développement d'APIs RESTFull.

Il existe plusieurs failles de sécurité dans le monde d'APIs RESTFull.

Les failles de sécurité les plus connus dans le développement d'APIs avec Spring Boot sont:

- L'injection XSS (Cross Site Scripting) qui ajoute  du code le plus souvent côté client (Javascript) dans nos beans Java.

- L'injection SPEL (Spring Expression Language) consiste à injecter une expression language de Spring dans nos objets.

- L'injection LDAP permet d'ajouter des expressions LDAP dans les objets ayant pour but d'introduire une valeur indésirable dans le fonctionnement du serveur.

Comment valide t-on nos objets ?

Pour nous prévenir de ses attaques nous allons utiliser le mécanisme de validation de l'API javax.validation avec son implémentation standard hibernate-validator.

Il existe plusieurs options de validation des objets contre ces différentes attaques. Les plus simples seront utilisées puisque l'idée est tout de même une validation.

De façon générale la validation consiste à créer des annotations et leurs validateurs pour ensuite annoter les champs des beans que nous voulons protéger.

Dans le cas d'une validation contre la faille XSS une librairie bien connue permet de le faire (jsoup).

En effet cette libraire permet de supprimer toutes les variables utilisées dans le monde du WEB (HTML, CSS, JS..) des champs de nos objets.

Pour la validation SPEL et LDAP nous allons utiliser des expressions régulières à l'aide de l'API Pattern présent dans le package java.util.regex.Pattern.

Vous pouvez vous référer à la source du projet de test pour une bonne compréhension de la validation des objets disponible ici .

N'hésitez à me revenir en cas de besoin sur la validation des objets.

En vous souhaitant bonne lecture.
Patrick BEUGRE

Comments

Popular posts from this blog

Apprendre le framework de Java (Spring Boot, 1ère partie)

Apprendre le framework de Java (Spring Boot, 2ème partie)

Apprendre le framework de Python (Flask 1ère partie )