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