Foros del Web » Programando para Internet » PHP »

sesion vulnerable!!!

Estas en el tema de sesion vulnerable!!! en el foro de PHP en Foros del Web. La cuestión es que he hecho una pagina login.php, la cual con el usuario y password, redirige a una pagina donde cada usuario ve sus ...
  #1 (permalink)  
Antiguo 14/12/2012, 15:12
 
Fecha de Ingreso: noviembre-2012
Mensajes: 11
Antigüedad: 11 años, 4 meses
Puntos: 0
sesion vulnerable!!!

La cuestión es que he hecho una pagina login.php, la cual con el usuario y password, redirige a una pagina donde cada usuario ve sus datos personales (nick, nombre, apellidos, dni…..) Esa misma pagina de datos personales le he creado una restricción por usuario de nivel (1). Así que todos usuario que tiene asignado el nivel 1 en la base de datos, acceden a esa pagina para ver sus datos.
En esa pagina, he puesto un enlace, redireccionando a otra pagina con la misión de que cada uno de los usuarios que quieran modificar sus datos puede hacerlo.

La llamada a esa pagina la he hecho de dos maneras:
Opcion 1
Código:
<p align="center"><a href="ModificarSociosPanel.php?nick=<?php echo strtoupper ($_SESSION['MM_Username'])?>" target="_blank">Modificar // actualizar </a></p>
Opcion 2
Código:
<p align="center"><a href="ModificarSociosPanel.php?nick=<?php echo $row_datosusuario['nick']; ?>" target="_blank">Modificar // actualizar </a></p></td>
Las dos me llevan a la página correctamente, puedo actualizar datos, pero detecto falta de seguridad. En esta misma página he creado restricción por nivel, pero detecto que es vulnerable. El resultado a la pagina explorador es el siguiente…..

http………………/ModificarSociosPanel.php?nick=PEPITO

Ya que el que inicio esta consulta fue Pepito, con su respectivo login. Carga los datos en el formulario y se puede modificar y actualizar si lo deseamos de los datos de PEPITO.
Vamos al grano….. ahora llego yo que también soy usuario y tengo el mismo nivel de PEPITO y sustituyo PEPITO por MARCOS….
http………………/ModificarSociosPanel.php?nick=MARCOS

entonces es cuando detecto, que me carga en el formulario mis datos y me deja modificarlo. Así que veo que cualquier usuario con ese nivel de acceso, una vez que entre, puede entrar a todos los datos de usuarios conociendo su NICK.

De que forma podría confeccionar o hacer la llamada, para que no fuera tan vulnerable???
  #2 (permalink)  
Antiguo 14/12/2012, 15:17
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: sesion vulnerable!!!

En lugar de pedir el nick por la URL, guarda el id de usuario en una variable de sesión y al entrar a ModificarSociosPanel usa ese id.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 14/12/2012, 16:36
 
Fecha de Ingreso: noviembre-2012
Mensajes: 11
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: sesion vulnerable!!!

Ya perdonaras, pero como podría guardad la variable id sesion y luego entrar usando ese variable???

Código:
<?php require_once('../Connections/BDatos.php'); ?>
<?php
//initialize the session
if (!isset($_SESSION)) {
  session_start();
}

// ** Logout the current user. **
$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true";
if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){
  $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){
  //to fully log out a visitor we need to clear the session varialbles
  $_SESSION['MM_Username'] = NULL;
  $_SESSION['MM_UserGroup'] = NULL;
  $_SESSION['PrevUrl'] = NULL;
  unset($_SESSION['MM_Username']);
  unset($_SESSION['MM_UserGroup']);
  unset($_SESSION['PrevUrl']);
	
  $logoutGoTo = "login.php";
  if ($logoutGoTo) {
    header("Location: $logoutGoTo");
    exit;
  }
}
?>
<?php
if (!isset($_SESSION)) {
  session_start();
}
$MM_authorizedUsers = "1";
$MM_donotCheckaccess = "false";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
  // For security, start by assuming the visitor is NOT authorized. 
  $isValid = False; 

  // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
  // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
  if (!empty($UserName)) { 
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    $arrUsers = Explode(",", $strUsers); 
    $arrGroups = Explode(",", $strGroups); 
    if (in_array($UserName, $arrUsers)) { 
      $isValid = true; 
    } 
    // Or, you may restrict access to only certain users based on their username. 
    if (in_array($UserGroup, $arrGroups)) { 
      $isValid = true; 
    } 
    if (($strUsers == "") && false) { 
      $isValid = true; 
    } 
  } 
  return $isValid; 
}

$MM_restrictGoTo = "login.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) 
  $MM_referrer .= "?" . $QUERY_STRING;
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo); 
  exit;
}
?>
Gracias

Etiquetas: formulario, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:22.