Je travaille sur une page qui permet aux utilisateurs de modifier les informations de profil. Je veux qu'ils soient en mesure d'éditer leurs informations publiques, mais ne leur permettent pas de changer les drapeaux du système tels que leur type d'utilisateur.Protéger des champs spécifiques lors de la liaison au printemps
Ceci est implémenté avec Spring MVC (3.0). L'objet utilisateur a des champs typiques tels que firstName
, lastName
, email
(tout doit être modifiable) et un booléen administrator
(qui ne doit pas être modifiable
Ma méthode ressemble à ceci:.
@RequestMapping(method = RequestMethod.POST)
public String doEdit(
@ModelAttribute("user") User user,
BindingResult result,
ModelMap model)
throws IOException
{
// validate, blah blah
// save user object
// return page
}
Ma forme comprend des champs firstName
, lastName
etc et semblait fonctionner très bien.
le problème est que si un utilisateur malveillant de messages une requête avec le paramètre administrator
comme « true » ils peuvent définir ce champ quand ils shouldn 't.
Je sais que je peux créer un objet "formulaire" séparé avec seulement les champs que je veux changer et utiliser pour la liaison automatique. (la copie sur les données). Le problème est que j'ai beaucoup d'endroits qui utilisent cette technique. (pour l'utilisateur et d'autres objets). Ce serait un problème à maintenir quand je veux ajouter des champs.
Existe-t-il un moyen d'utiliser des annotations ou d'autres techniques dans Spring MVC pour ajouter des paramètres à la liste blanche et empêcher les modifications des propriétés d'objet de domaine arbitraires?
juste une anecdote historique, le printemps était si lâche dans ce domaine, qu'un utilisateur malveillant pourrait injecter « class.classLoader.URLs [] » à tout objet de modèle, en prenant complètement le contrôle du serveur. http://www.springsource.com/security/cve-2010-1622 – irreputable
Je suis stupéfait. Je viens de passer de Spring 3.0.2 à Spring 3.0.5 en production la semaine dernière. –