pratiques sécurité

2021-04-01

Headers Http sur toutes les pages délivrées

resp.addHeader("X-Frame-Options", "DENY");
resp.addHeader("X-XSS-Protection", "1; mode=block");
resp.addHeader("X-Content-Type-Options", "nosniff");

Header Http positionné lors de la création d’un HttpSession

response.setHeader("Set-Cookie", "JSESSIONID=" + session.getId() + "; Path=/; HttpOnly");

Injection SQL

Ne pas créer les requêtes SQL par concaténation / formatage de chaîne (%s)

=> N’utiliser que des PreparedStatement (les paramètres sont échappés automatiquement)

Sortie page HTML

Ne pas renvoyer de code HTML : si une donnée de la BDD contient un code JS injecté, il peut se retrouver exécuté lors de l’affichage

Remplacer les caractères < > & ’ par leur entités html en sortie

Entrée formulaire HTML

Vérifier les paramètres, formats… côté serveur (en plus du côté client)

Un Filtre (implements javax.servlet.Filter) peut être mis en place par exemple pour vérifier si les paramètres contiennent du code HTML, etc. => permet de centraliser les vérifications, mais peut-être complexe (exemple : post avec body en json contenant une valeur avec du code html) Si stocké en BDD, le code peut-être joué (si pas échappé en sortie)

Jeton Anti CSRF

Ajouter dans les formulaires du site A un jeton (champ caché) qui sera vérifié lors de la soumission. Ca permet d’éviter qu’un site tiers B formate une url (incluse dans sa page) qui sera jouée par le navigateur de l’utilisateur sur le site A.

Exceptions

Rattraper les exceptions et ne pas afficher la stack (pourrait indiquer une ip, nom de machine, chemin disque…)

Mettre dans la page HTML un UUID et dans le local7 l’UUID avec la pile d’exception.

Utiliser une page d’erreur spécifique (il me semble que de base, la page d’exception affiche la version tomcat)

Côté système :

Ne pas donner les versions Apache / Tomcat dans les headers de réponse.