Estoy portando una aplicación ASP.NET a MVC y necesito almacenar dos elementos relacionados con un usuario autenticado: una lista de roles y una lista de identificadores de elementos visibles, para determinar qué puede ver o no el usuario.Roles de usuario: ¿por qué no almacenar en sesión?
Hemos utilizado WSE con un servicio web en el pasado y esto hace que las cosas sean increíblemente complejas e imposibles de depurar correctamente. Ahora estamos abandonando el servicio web que estaba buscando simplificar drásticamente la solución simplemente para almacenar estas cosas en la sesión. Un colega sugirió usar los roles y los proveedores de membresía, pero al investigar esto he encontrado varios problemas:
a) Sufre de problemas similares pero diferentes a WSE en que tiene que usarse de una manera muy limitada. Hacerlo complicado incluso para escribir pruebas;
b) La única opción de almacenamiento en caché para RolesProvider se basa en cookies que hemos rechazado por motivos de seguridad;
c) Presenta un sinfín de complicaciones y un exceso de equipaje no deseado;
Todo lo que queremos hacer, en pocas palabras, es almacenar dos variables de cadena en la sesión de un usuario o algo equivalente de forma segura y consultarlas cuando lo necesitemos. Lo que parece ser un trabajo de diez por minuto tiene tomado hasta ahora varios días de investigación y para agravar el problema se ha descubierto ahora que los identificadores de sesión al parecer, se pueden falsificar, ver
http://blogs.sans.org/appsecstreetfighter/2009/06/14/session-attacks-and-aspnet-part-1/
estoy pensando izquierda hay No es una manera fácil de hacer este trabajo muy simple, pero me parece imposible de creer.
podría alguien:
a) proveer información sencilla sobre cómo realizar sesiones de ASP.NET MVC seguro como siempre he creído que eran?
b) sugerir otra manera simple de almacenar estas dos variables de cadena para las funciones de un usuario conectado, etc., sin tener que reemplazar una pesadilla compleja con otra como se describió anteriormente?
Gracias.
Debería haber dicho, usamos SSL así que no hay problemas allí. Además, nunca tuvimos problemas con el reajuste de las sesiones, así que no estoy preocupado por eso. – Phil
Como las variables de sesión son completamente seguras: eso es lo que pensé, pero el artículo al que me he vinculado sugiere que uno puede engañar a un usuario para unirse a una sesión existente de varias maneras y compartirlo con el usuario autenticado que posteriormente inicia sesión y almacena así todos sus propios roles para ser usados por la otra persona. La solución obvia era almacenar la dirección IP en la sesión y verificarla cada vez, pero aparentemente también es fácil falsificarla en la solicitud. Aunque no he podido hacer ninguna de las formas sugeridas de – Phil
de unirme a un trabajo de sesión existente, preferiría saber por qué no solo para confiar en mis obviamente carentes de habilidades como hacker. Si tenía confianza en eso, creo que hemos resuelto el problema, pero hasta ahora no lo estoy. – Phil