Busqueda local

Loading

domingo, 20 de marzo de 2011

MVC Security

Después de explicarles como se implementa el Membership  de haber hablado de OWASP  lo correcto es hablar de las formas en que podemos agregarle seguridad a nuestro sitio MVC. Si eres de aquellos que se han preguntado cuales serian las mejores practicas para implementar la seguridad usando este patrón, creo que este post te parecerá interesante.
Después del tiempo que le he dedicado creo que tengo un entendimiento de los proyectos MVC suficiente, para poder explicar como hacerlos; sin embargo el tema mas dedicado dentro de todo lo que aquí les h hablado esta relacionado con la seguridad. Un sitio web que no tenga el mínimo de protección, esta expuesto a ser hackeado solo por el gusto de hacerlo.
Es muy común pensar que la seguridad del servidor y la plataforma de desarrollo deben ser suficiente para protegernos. Nuestra atención se centra en el mecanismo de Autorización y autenticación, en Windows hemos aprendido que si una persona accede a la aplicación apropiadamente ya tenemos controlado este detalle; sin embargo la seguridad en internet, requiere una protección extra contra ataques, que no se presentan con tanta facilidad en equipos dentro de nuestra red.
Sin importar como implementemos nuestros mecanismos de seguridad, siempre debemos exponer al menos una parte para permitirle a un usuario no autorizado, solicitar que se active el mecanismos de autenticación o Login. Dentro de MVC el primero en responder a una solicitud de acceso es un Controller, así que lo mas natural es pensar en proteger este elemento.
 

Basándonos en un par de validaciones simples:

Dentro de las aplicaciones MVC el HttpContext se encarga de encapsular toda la información específica, relacionada con una solicitud individual de HTTP. A través de este objeto podemos acceder al Current, mismo que nos ofrece acceso al User actual. Si este User es nulo, podemos estar seguros que no se ha realizado el proceso de Login. Si no fuera nulo, no quiere decir que podemos permitirle el paso aun, para eso es necesario que este Autenticado.
Nuestro primer mecanismo lo podemos crear a partir de extender la clase Controller y poner en el contructor de nuestra nueva clase esta validación y si algo falla, re direccionarlo hacia nuestra pagina de Logon.
El código quedaría así:
secure1
Para usar nuestra clase solo debemos asegurarnos que el controler que estemos usando derive de esta:
secure2
 

Mecanismo Logon

Cuando creamos nuestro proyecto MVC se crean de forma automática un controller para atender las cuentas, así como las Views necesarias para interactuar con el usuario. Lo único que debemos hacer es verificar el Membership, del que ya hablamos y tendremos un mecanismo de Logon instantáneo.
 

AuthorizeAttribute

ASP.NET MVC 2 nos ofrece un filtro llamado AuthorizeAttribute, por medio de este, podemos restringir acceso a las acciones. Si no le permitimos acceso a un usuario este recibirá el código de error 401, el cual indica no autorización.
Nivel de protección
Podemos proteger el Controller por completo o cada acción, según sea la necesidad del proyecto. Para proteger el Controller, solo debemos agregar la etiqueta antes de la declaración del controller.
Para una acción, solo debemos agregar el filtro a manera de etiqueta en la línea anterior a nuestra acción, con lo cual solo se verificara que el user este autenticado:
secure3
Si hemos configurado el Membership, podemos controlar el acceso a las acciones por medio del atributo, agregando la palabra users o roles:
secure4
Desde luego el uso de Users en vez de Roles no es recomendado, por el alto mantenimiento que representa.
Desde luego no es recomendable liberar nuestra aplicación sin ofrecer al cliente una sección desde la cual pueda administrar sus usuarios, si desean ver un ejemplo visiten este post de ScottGu, aun que es para ASP.NET 2.0 aun es valido.
El poder del código solo es completo, si tenemos el conocimiento de como usarlo.

No hay comentarios:

Publicar un comentario