Estoy trabajando en una página que permite a los usuarios editar información de perfil. Quiero que puedan editar su información pública, pero no les permite cambiar las banderas del sistema, como su tipo de usuario.Proteger campos específicos al vincular en Spring
Esto se implementa con Spring MVC (3.0). El objeto Usuario tiene campos típicos como firstName
, lastName
, email
(todo debe ser editable) y un booleano administrator
(que no debe ser modificable
Mi método es como la siguiente:.
@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
}
Mi forma incluye campos firstName
, lastName
etc., y parecía funcionar bien.
el problema es que si un usuario publica maliciosos una consulta con el parámetro administrator
como "verdadero" que puedan establecer este campo cuando shouldn 't.
Sé que puedo crear un objeto "formulario" separado con solo los campos que quiero cambiar y usarlo para el enlace automático. (la copia sobre los datos). El problema es que tengo muchos lugares que usan esta técnica. (para el usuario y otros objetos). Sería una molestia para mantener cuando quiero agregar campos.
¿Hay alguna forma de utilizar anotaciones u otras técnicas en Spring MVC para incluir en la lista de parámetros y evitar cambios en propiedades de objetos de dominio arbitrarios?
sólo una anécdota histórica, la primavera era tan flojo en esta zona, que un usuario malintencionado podría inyectar "class.classLoader.URLs []" a cualquier objeto del modelo, tomando por completo el control del servidor. http://www.springsource.com/security/cve-2010-1622 – irreputable
Estoy estupefacto. Acabo de actualizar de Spring 3.0.2 a Spring 3.0.5 en producción la semana pasada. –