[SOLUCIONADO] Problemas y preguntas LOGIN ASP.NET

Iniciado por rush, Enero 04, 2016, 04:33:31 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 04, 2016, 04:33:31 PM Ultima modificación: Enero 05, 2016, 02:58:47 PM por blackdrake
Buenas, hace tiempo estoy haciendo un proyecto, parece ser que no acabo de aprender y cada vez me topo con la pared cuando aparece cosas nuevas, ahora me toco la parte de hacer un login en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, pero con diferentes tipos de usuario, en este caso solo tengo 2 tipos, usuarios visitantes y usuarios administradores, e buscado como crear un login, pero nadie habla mucho acerca de como ocultar links, opciones etc, jamas e creado un sitio o aplicación en la cual tenga mas de 1 tipo de usuario, así que no se como se manejan las vistas, lo mas fácil es que cree una vista para los usuarios y otra vista para los administradores, pero no se si es lo mas correcto o de que manera se tiene que hacer, esta es la estructura del sitio


(No juzguen la apariencia xD)

Esa seria la estructura del administrador, asi que ahi no tengo mucho problema, pero si yo quiero que entre un visitante, solo podra ver el area de catalogos, como puedo ocultar todo lo demas?, tengo que crear una nueva vista o una nueva master page o como es que funciona esto?, quiero que se vea de la siguiente manera.



Otra pregunta, ya lei la diferencia entre la cookie y sessiones, lo mas seguro es que utilice sessiones y les de un timeout, ahora como puedo validar que un usuario tenga permisos sobre esa ruta o no, la idea que tuve fue hacer una consulta que me devuelva el nombre de usuario y el tipo de usuario y subirlo a session
al tener el evento page_load verificar el el usuario es de tipo ADMIN o VISITANTE, dependiendo de estoy cargar la pagina o no, espero puedan ayudarme saludos.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Enero 05, 2016, 09:09:04 AM #1 Ultima modificación: Enero 05, 2016, 09:17:35 AM por blackdrake
Hola! te dejo un fragmento de código que tenía de una vieja web en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Login.aspx.cs
Código: asp
 try
        {
            SqlConnection conexion = new SqlConnection(StrCadenaConexion);
            SqlCommand comando = new SqlCommand(StrComandoSql, conexion);
            conexion.Open();
            SqlDataReader reader = comando.ExecuteReader();
            if (reader.Read())
            {
                Session.Add("Id", reader.GetInt32(0));
                Session.Add("Nombre", reader.GetString(1));
                Session.Add("Rol", reader.GetString(2));
                e.Authenticated = true;
                reader.Close();
                comando.Dispose();
                conexion.Close();

                if (Convert.ToString(Session["Rol"]) == "A")
                    Response.Redirect("~/Admin.aspx");
                if (Convert.ToString(Session["Rol"]) == "U")
                    Response.Redirect("~/Default.aspx");
            }
            else
            {
                e.Authenticated = false;
                reader.Close();
                comando.Dispose();
                conexion.Close();
                lblEstado.Visible = true;
                lblEstado.Text = "El email o la contraseña introducidos no son válidos";
            }


Personalmente, era de una tienda online, donde el administrador del sitio NO podía comprar (por eso lo redirijo automáticamente a admin.aspx).

Pero, en la master page, si que jugué con las sesiones para cargar algunas opciones del menú u otras (lo que tu puedes hacer, es una página idéntica para los dos y mostrar diferentes opciones así):

MasterPage.master.cs
Código: asp
protected void Page_Load(object sender, EventArgs e)
    {
        if (Convert.ToString(Session["Rol"]) == "U")
        {
            lblLogin.Text = "<ul class='nav navbar-nav'><li><a href='default.aspx'>Inicio</a></li><li><a href='catalogo.aspx?categoria=0'>Catalogo</a></li><li><a href='carrito.aspx'>Carrito</a></li>";
            lblLogin.Text += "<li><a href='pedidos.aspx'>Mis Pedidos</a></li>";
            lblLogin.Text += "<li><a href='perfil.aspx'>Mi cuenta</a></li><li><a href='contacto.aspx'>Soporte</a></li>";
            lblLogin.Text += "<li><a href='logout.aspx'>Cerrar Sesión</a></li></ul>";
        }
        else
        {
            lblLogin.Text = "<ul class='nav navbar-nav'><li><a href='default.aspx'>Inicio</a></li><li><a href='catalogo.aspx?categoria=0'>Catalogo</a></li><li><a href='contacto.aspx'>Contacto</a></li>";
            lblLogin.Text += "<li><a href='login.aspx'>Acceder</a></li></ul>";
        }
        if (Convert.ToString(Session["Rol"]) == "A")
        {
            lblLogin.Text = "<ul class='nav navbar-nav'><li><a href='default.aspx'>Inicio</a></li><li><a href='catalogo.aspx?categoria=0'>Catalogo</a></li>";
            lblLogin.Text += "<li><a href='Admin.aspx'>Administración</a></li>";
            lblLogin.Text += "<li><a href='logout.aspx'>Cerrar Sesión</a></li></ul>";
        }
    }



NOTA: Los logins de asp por defecto son vulnerables a sqli, puesto a que era para clase hice una chapuzilla rápido para evitarlo, pero así te haces una ídea :D

Login.aspx.cs
Código: asp
 //Evitamos sqli --> 'or '1'='1
    if (Login1.UserName.Contains("'") || Login1.Password.Contains("'"))
    {
        lblEstado.Visible = true;
        lblEstado.Text = "Sqli Detectado";
        sqli(ip);
    }




Espero que te haya servido.

Saludos.



Gracias blackdrake, me diste varias ideas, supongo que para que no puedan acceder por url verificas los permisos en el page_load y si no estan logeados los rediriges, para lo de SQLI lei que haciendolo de esta manera se evitaba el fallo de seguridad:



Gracias por el gran aporte, no hubiera estado mejor explicado!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Gracias blackdrake, me diste varias ideas, supongo que para que no puedan acceder por url verificas los permisos en el page_load y si no estan logeados los rediriges, para lo de SQLI lei que haciendolo de esta manera se evitaba el fallo de seguridad:



Gracias por el gran aporte, no hubiera estado mejor explicado!

Exacto, también es una posibilidad (yo lo hice también así porque guardaba los intentos de sqli en la BD).

Citarsupongo que para que no puedan acceder por url verificas los permisos en el page_load y si no estan logeados los rediriges
Exacto :D

Doy el tema por solucionado entonces @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta?

Saludos.



Solo una cosa mas, en las sessiones, como para destruir la session se usa Session.Clear()?
Que pasa si varios usuarios inician sesion con el mismo usuario?
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Solo una cosa mas, en las sessiones, como para destruir la session se usa Session.Clear()?
Que pasa si varios usuarios inician sesion con el mismo usuario?

Puedes utilizar:

Código: asp
Session.Clear();
Session.Abandon();


En cuanto a: Que pasa si varios usuarios inician sesion con el mismo usuario?

No pasaría nada, cada uno se trataría como usuarios "independientes" pudiendo cerrar sesión cada uno cuando quisiera.

Obviamente si se modifica por ejemplo el perfil, al ser la misma cuenta, verían todos el cambio.

Saludos.



Ok gracias por tus respuestas blackdrake, puedes darlo por solucionado excelente ayuda!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta