none
Forma correcta de redireccionar usuarios ? RRS feed

  • Pregunta

  • Estimados, necesito saber que tan mal estoy implementando la configuracion de una pagina y el manejo de usuarios,

    Tengo una pagina de inicio login, si el usuario es valido este redirecciona a  una pagina de inicio anidada a una master page,

    en esa master page tengo un menu de navegación que no todos los usuarios comaprten las mismas opciones, para eso, en el page load estoy haciendo los siguiente:

    if(!IsPostBack)
    {
        usuario = (Usuario)(Session["usuario"]); //esto lo cargo en el login
    
       if(usuario.perfil == 1)
       {
          ocularControlesPerfil1();
       }
       
       
       if(usuario.perfil == 2)
       {
          ocularControlesPerfil2();
       }
    
    
    }

    y luego para redireccionar a las paginas del men, asigno un evento click y redirecciono mediante "Response.redirect",

    y al abrir la pagina seleccionada me vuelve a cargar el page load de la master....  que me recomiendan hacer?

    miércoles, 3 de mayo de 2017 4:34

Respuestas

  • hola

    el problema es que deberias implementar la seguridad de asp.net para segurizar correctamente el sitio y no usar Session porque es incorrecto

    Login – Usando Password con Hash

    la idea es que uses en el config algo como esto

    <authentication mode="Forms">
        <forms name="appNameAuth" path="/" loginUrl="frmLogin.aspx" defaultUrl="Default.aspx" protection="All" />
    </authentication>
       
      <authorization>
        <deny users="?" />
      </authorization>

    para despues poder redireccionar usando

     FormsAuthentication.RedirectFromLoginPage(txtUser.Text, chkPersistLogin.Checked);

    de esta forma sino estas autenticado sera el propio asp.net quie te redireccione solo al login, teniendo el sitio bien seguro

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Joyce_ACModerator miércoles, 3 de mayo de 2017 14:58
    • Marcado como respuesta Alan Moncada jueves, 4 de mayo de 2017 15:48
    miércoles, 3 de mayo de 2017 5:16
  • Una observación: Ten presente que esto no es suficiente como mecanismo de seguridad, en el sentido de que aunque algunas opciones estén ocultas en el menú, los usuarios podrán acceder a esas opciones si teclean en el navegador la ruta que corresponde a la página que no se ve en el menú. Para evitarlo, en cada una de las páginas tendrías que volver a hacer una comprobación de los permisos del usuario, y rechazarlo si no los tiene. Esto es bastante pesado de hacer, sobre todo si hay muchas páginas, y es costoso de mantener si en el futuro añades nuevas páginas o cambias los criterios de acceso a las existentes.

    Para evitar todo ese trabajo, es preferible apoyarse en los mecanismos que ya trae "de fábrica" ASP.NET. Deja que el login de los usuarios lo haga con Membership, que ya te salvará el usuario en User.Identity y no necesitas el Session. Asigna los perfiles mediante los roles de Membership, que están para eso. En el menú, usa el asp:Menu y configúrale los roles de las opciones en la configuración del menú. Él solito mostrará las opciones oportunas según el rol del usuario, sin que tengas que programar nada. Y para los permisos de las páginas, usa el <allow> del web.config en combinación con <location Path...> para establecer los permisos de cada página, y eso ya te las protege sin programar nada.

    • Propuesto como respuesta Joyce_ACModerator miércoles, 3 de mayo de 2017 14:58
    • Marcado como respuesta Alan Moncada jueves, 4 de mayo de 2017 15:48
    miércoles, 3 de mayo de 2017 10:11

Todas las respuestas

  • hola

    el problema es que deberias implementar la seguridad de asp.net para segurizar correctamente el sitio y no usar Session porque es incorrecto

    Login – Usando Password con Hash

    la idea es que uses en el config algo como esto

    <authentication mode="Forms">
        <forms name="appNameAuth" path="/" loginUrl="frmLogin.aspx" defaultUrl="Default.aspx" protection="All" />
    </authentication>
       
      <authorization>
        <deny users="?" />
      </authorization>

    para despues poder redireccionar usando

     FormsAuthentication.RedirectFromLoginPage(txtUser.Text, chkPersistLogin.Checked);

    de esta forma sino estas autenticado sera el propio asp.net quie te redireccione solo al login, teniendo el sitio bien seguro

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Joyce_ACModerator miércoles, 3 de mayo de 2017 14:58
    • Marcado como respuesta Alan Moncada jueves, 4 de mayo de 2017 15:48
    miércoles, 3 de mayo de 2017 5:16
  • Una observación: Ten presente que esto no es suficiente como mecanismo de seguridad, en el sentido de que aunque algunas opciones estén ocultas en el menú, los usuarios podrán acceder a esas opciones si teclean en el navegador la ruta que corresponde a la página que no se ve en el menú. Para evitarlo, en cada una de las páginas tendrías que volver a hacer una comprobación de los permisos del usuario, y rechazarlo si no los tiene. Esto es bastante pesado de hacer, sobre todo si hay muchas páginas, y es costoso de mantener si en el futuro añades nuevas páginas o cambias los criterios de acceso a las existentes.

    Para evitar todo ese trabajo, es preferible apoyarse en los mecanismos que ya trae "de fábrica" ASP.NET. Deja que el login de los usuarios lo haga con Membership, que ya te salvará el usuario en User.Identity y no necesitas el Session. Asigna los perfiles mediante los roles de Membership, que están para eso. En el menú, usa el asp:Menu y configúrale los roles de las opciones en la configuración del menú. Él solito mostrará las opciones oportunas según el rol del usuario, sin que tengas que programar nada. Y para los permisos de las páginas, usa el <allow> del web.config en combinación con <location Path...> para establecer los permisos de cada página, y eso ya te las protege sin programar nada.

    • Propuesto como respuesta Joyce_ACModerator miércoles, 3 de mayo de 2017 14:58
    • Marcado como respuesta Alan Moncada jueves, 4 de mayo de 2017 15:48
    miércoles, 3 de mayo de 2017 10:11