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