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

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" );
        }