10 nov. 2021, 15:02:42 Thomas Dumont

Protection des formulaires contre les CSRF (cross-site request forgery)

Pour se protéger des injections de requêtes illégitimes par rebond (cross-site request forgery ou CSRF), il est proposé de créer et d’envoyer avec chaque formulaire une valeur aléatoire et limitée à la session utilisateur et à l’action. Le serveur doit vérifier que cette valeur est bien renvoyée dans la requête de validation du formulaire. Pour cela il faut :

  • Ajouter le token dans l’objet model pour le template :
model.put(SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance().getToken(request, ACTION_TEMPLATE));
  • Ajouter le champ token dans le formulaire de la template :
<input type="hidden" name="token" value="${token}">
  • Contrôler ensuite la requête :
// CSRF Token control
if (!SecurityTokenService.getInstance().validate(request, ACTION_TEMPLATE)) {
    throw new AccessDeniedException("Invalid security token");
}