Nueva pregunta

Pregunta:

Fecha: 14-01-2019 08:59:28 (En Español)

Evitar que Usuarios de Session B puedan Acceder a archivos se Session A por URL[No resuelta]

Hola tengo un problemita de seguridad en php cree un codigo de ingreso que segun el usuario que se loggue me llevara a un menu A o un menu B es este


proceso.php
   <?php
	session_start();

	$usuario=$_POST['usuario'];
	$clave= ($_POST['clave']);
	$_SESSION['usuario']=$usuario;
	

	include("conexion.php");

	$proceso = $conexion->query("SELECT * FROM users WHERE user='$usuario' AND clave='$clave' ");

	if(	$resultado = mysqli_fetch_array($proceso)){
		if ($resultado['grupo'] == 'A') {
			$_SESSION['grupo'] = $resultado['grupo'];
			header("location:miempresa.php");
			}

		if ($resultado['grupo'] == 'B') {
			$_SESSION['grupo'] =$resultado['grupo'];
			header("location:menunort");
		}
		if ($resultado['grupo'] == 'C') {
			$_SESSION['grupo'] =$resultado['grupo'];
			header("location:miempresa2.php");
		}

		if ($resultado['grupo'] == null) {
			echo "Usuario no esta en ningun grupo";
		}
	}
	else{
		echo "Usuario o Contraseña incorrecta";
	}
?>


El codigo funciona perfectamente alli no esta el problema. El problema se presenta cuando yo me loggue como usuario B voy a dejar un ejemplo bastante claro

si usuario A se logguea entra al menu www.miempresa.com
si usuario B se logguea entra al menu www.miempresa2.com

aqui esta el problema si yo me loggue como usuario B voy a entrar a la url www.miempresa2.com y si edito la url y borro el 2 automaticamente entraria al menu de Usuario A lo cual no deberia ser porque usuario A tiene el codigo de verificacion que dice
   <?php
	session_start();
	
	if(isset($_SESSION['grupo'])){		
	}
	else{
		header("location:intro");
	}	
	?>


este codigo de verificacion solo me ayuda a verificar si la sesion iniciada esta en el grupo A si no me manda al intro,
yo se que muchos diran pero cambia el nombre del archivo seria una solucion pero igual podrian acceder sabiendo el nombre de los 2 archivos mi inquietud es evitar que de una sesion a otra salten y les permita acceder

formulo mi pregunta nuevamente como evitar que los usuarios de session B se pasen al menu de sesion A al editar la URL

GRACIAS QUEDO ATENTO A SUS RESPUESTAS
Etiquetas: MySQL - PHP - PHP Avanzado Votos: 0 - Respuestas: 5 - Vistas: 15 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 14-01-2019 11:29:01 Hola ya intentó agregando session_name("nombre-de-sesion); ?

    Quedaría algo así:
    <?php 
         session_name('nombre-de-sesion');
         session_start();
         //el resto del código
    ?>
    


    Ese session_name() debe colocarlo simpre donde aparesca session_start(), antes de este.
      Votos: 0 - Link respuesta
     
  •  
      1  
     
    Fecha: 15-01-2019 04:26:54 Buen Día.
    Creo que tenes varias opciones, tal vez puedas crear una tabla donde esten las distintas partes de tu sitio, y relacionarla con los grupos en una tercer tabla donde esteen los permisos, en esa tabla permisos podrias poner si el grupo X tiene acceso a la seccion X mediante un valor 0 y 1.
    Deberias guardar en el inicio de session a que grupo pertenece el usuario que esta haciendo login y al principio de cada seccion del sitio validar si el usuario X con el grupo X tiene permisos para acceder ahi, caso contrario que lo redirija.

    Tabla grupos
    id, nombreGrupo

    Tabla grupo_permiso
    idGrupo, idSeccion, acceso

    Tabla secciones
    id, nombreSeccion

    Ej:
    tbl grupo_permiso
    1 , 1 , 1 -> El grupo 1 podria entrar a la seccion 1
    2 , 1 , 0 -> El grupo 2 No podria entrar a la seccion 1
    3 , 1 , 1 -> El grupo 3 Podria entrar a la seccion 1

    Y al comienzo de la seccion del sitio haces una validacion contra esta tabla grupo_permiso

    Si no quieres hacer algo dinamico con tablas podrias validar al principio de la seccion X mediante una variable que corresponda al grupo autorizado y compararla con el grupo al cual pertenece el usuario que llego hasta ahi, ese valor lo podrias recuperar desde la variable de session que guardaste.

    if($_SESSION['grupo'] != 'A') {
    header('location:home');
    }

    Es lo que se me ocurre podrias hacer, aclaro que soy un aprendiz, espero no haberte confundido.
    saludos.
      Votos: 1 - Link respuesta
     
  • Fecha: 15-01-2019 06:51:31 Yerlin
    Buenas tardes

    Por lo que leo en tu script y disculpa si leo mal, te esta faltando algo:

    Si recibes un SESSION:

       <?php
    	session_start();
    	
    	if(isset($_SESSION['grupo'])){		
    	}
    	else{
    		header("location:intro");
    	}	
    	?>


    Te esta faltando una parte ... ¿Que hacer con la variable que recibis?

    Por ejemplo:

    <?php
    
        if(!isset($_SESSION['grupo'])){
          echo "FUERA";
        
    }else{
    
          $x_grupo = $_SESSION['grupo'];
          $users = mysqli_query($con, "SELECT * FROM users WHERE algo  = '$x_grupo' ");
          while($row = mysqli_fetch_assoc($usu)){
     
          // algo es el campo que contiene el registro de cada usuario A, B o C, segun corresponda
         
          $algo    = $row['algo'];
            
        }}


    Entonces, aqui si la session responde al grupo indicado, accese a este sector, caso contrario, no

    Un saludo
      Votos: 1 - Link respuesta
     
  • Fecha: 16-01-2019 02:22:02 yo tengo uno que te pueda servir
    if(isset($_SESSION['usuario'])){
    if($_SESSION['usuario']['perfil'] != "administrador"){
    header("Location: ../usuario/");
    }
    }else {
    header('Location : ../');
    }

    ?>

    pon eso en cada archivo que corresponda al tipo de usuario
    yo lo uso y va bien
      Votos: 1 - Link respuesta
     
  • Fecha: 18-01-2019 04:12:38 Bueno lo que yo hago en los sistemas que realizo que tienen multiples tipos de menu es cargar el menu de acuerdo al tipo de usuario al igual que valido por medio de permisos o grupos de usuarios el acceso a las áreas y asi evito el qcceso no autorizado por url, por ejemplo:

    Donde se supone va el menu:
    switch($_SESSION['nivel']){
    	case 'admin':
    		include('menu_a.php');
    	break;
    	
    	case 'usuario':
    		include('menu_b.php');
    	break;
    }
    


    En los distintos módulos manejo el grupo de usuarios que puede accceder:
    if($_SESSION['group_type'] != 'group_a'){
    	header('location:home.php');
    	exit;
    }
    


    y si varios grupos tienen acceso a un modulo determinado, lo valido así:
    if(!in_array($_SESSION['group_type'],['group_a','group_c']) ){
    	header('location:home.php');
    	exit;
    }
    


    De esta manera evitarías en algo el acceso no autorizado a zonas de tu sistema por url, ya que esto valida si el usuario tiene o no acceso a dicho modulo, no vale de nada que cambie la url pues el sistema me rebotará al detectar que no tengo acceso a esa sección, esto aplica también a sesiones de un modulo.

    Lo que no entiendo es el asunto de las URLs diferentes por cada tipo de usuario, pero bueno.

    Espero te sirva.
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com