Foros del Web » Programando para Internet » PHP »

Control de acceso (¿vulnerabilidad?)

Estas en el tema de Control de acceso (¿vulnerabilidad?) en el foro de PHP en Foros del Web. Buenas tardes. Miren, yo para controlar que un usuario acceda por ejemplo a admin.php hago lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php   ...
  #1 (permalink)  
Antiguo 08/02/2013, 09:51
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Pregunta Control de acceso (¿vulnerabilidad?)

Buenas tardes.


Miren, yo para controlar que un usuario acceda por ejemplo a admin.php hago lo siguiente:
Código PHP:
Ver original
  1. <?php
  2.   if ( !empty($_SESSION['admin']) ) // Si NO ESTÁ VACÍA la sesión
  3.     echo "Usuario con acceso a administración";
  4. ?>

Y cuando se loggean hago lo siguiente:
Código PHP:
Ver original
  1. $_SESSION['admin']="nombre_del_usuario";

La cuestión es la siguiente: al hacer empty no compruebo el valor de la sesión, yo podría colar un PHPSESSID falso a través de una cookie y se crearía en mi sistema.
Código MySQL:
Ver original
  1. +----------------------------+----------------------------------------------+
  2. | id_de_la_sesion            | contenido_de_la_sesion                       |
  3. +----------------------------+----------------------------------------------+
  4. | cacsihuv6r4s7h3f9l4cjpj694 |                                              |

La pregunta es, aunque consiga crearla, EMPTY NUNCA me dará acceso a la web aunque falsee el PHPSESSID y lo meta en el sistema? Dado que no compruebo nunca el valor.
  #2 (permalink)  
Antiguo 08/02/2013, 09:57
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 144
Antigüedad: 11 años, 7 meses
Puntos: 12
Respuesta: Control de acceso (¿vulnerabilidad?)

El problema es que si vos le das cualqueir valor a la session id ya no esta vacia... lo cual le permite el ingreso a tu sistema
  #3 (permalink)  
Antiguo 08/02/2013, 10:15
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Exclamación Respuesta: Control de acceso (¿vulnerabilidad?)

Cita:
Iniciado por pablo_exeg Ver Mensaje
El problema es que si vos le das cualqueir valor a la session id ya no esta vacia... lo cual le permite el ingreso a tu sistema
¿?¿?¿?

A menos que te loguees bien CREO que no se puede dar valor al PHPSESSID, solo crearla.
  #4 (permalink)  
Antiguo 08/02/2013, 10:41
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Control de acceso (¿vulnerabilidad?)

tienes que identificar que el propietario de la session sea el mismo del que la creo, tan solo con un identificador de session no es suficiente ya que puede ser alterado y las consecuencias que conlleva , tendras que crear alguna session que identifique al usuario en el momento de crear la session ya sea con las cabeceras , ips , etc....

un ejemplo sencillito

$_SESSION['admin'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE');

Código PHP:
Ver original
  1. <?php
  2.       if ( isset($_SESSION['admin']) and $_SESSION['admin'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE'))
  3.         echo "Usuario con acceso a administración";
  4.     ?>

Es tan solo un ejemplo

user agent y la ip igualmente puede ser alterado


tambien puedes crear una cookie ademas de la cookie de session

Código PHP:
Ver original
  1. $_SESSION['admin'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE');
  2. setcookie('ID_ADMIN',session_id());
  3.  
  4. <?php
  5.       if ( isset($_SESSION['admin']) and  $_SESSION['admin'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE') and isset($_COOKIE['ID_ADMIN']) and $_COOKIE['ID_ADMIN'] == session_id())
  6.         echo "Usuario con acceso a administración";
  7.     ?>

Última edición por webankenovi; 08/02/2013 a las 11:03
  #5 (permalink)  
Antiguo 08/02/2013, 17:22
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Control de acceso (¿vulnerabilidad?)

Cita:
Iniciado por webankenovi Ver Mensaje
tienes que identificar que el propietario de la session sea el mismo del que la creo, tan solo con un identificador de session no es suficiente ya que puede ser alterado y las consecuencias que conlleva , tendras que crear alguna session que identifique al usuario en el momento de crear la session ya sea con las cabeceras , ips , etc....

un ejemplo sencillito

$_SESSION['admin'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE');

Código PHP:
Ver original
  1. <?php
  2.       if ( isset($_SESSION['admin']) and $_SESSION['admin'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE'))
  3.         echo "Usuario con acceso a administración";
  4.     ?>

Es tan solo un ejemplo

user agent y la ip igualmente puede ser alterado


tambien puedes crear una cookie ademas de la cookie de session

Código PHP:
Ver original
  1. $_SESSION['admin'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE');
  2. setcookie('ID_ADMIN',session_id());
  3.  
  4. <?php
  5.       if ( isset($_SESSION['admin']) and  $_SESSION['admin'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].'CLAVE') and isset($_COOKIE['ID_ADMIN']) and $_COOKIE['ID_ADMIN'] == session_id())
  6.         echo "Usuario con acceso a administración";
  7.     ?>














En una sola palabra: Perfecto.

Lo que sí la IP no la usaré por el tema del uso de VPNs, proxies, etc.
Ya he creado una función y me queda retocarla. Y mañana si todo me va bien doy el tema como solucionado.
Una pregunta, sabes cómo podría hacer que para X página web (http://www.google.es , http://www.forosdelweb.com), es decir con la IP o DNS, enviar desde el navegador siempre el mismo UserAgent que será diferente al que lleves. Es decir, quiero que cuando entren a mi web tengan un UserAgent diferente, y mientras poder navegar por otras webs usando un UserAgent diferente. ¿Algún addon o configuración? Los addons que he probado no vienen con tal posible configuración.


Saludos! :)
  #6 (permalink)  
Antiguo 12/02/2013, 15:12
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Pregunta Respuesta: Control de acceso (¿vulnerabilidad?)

Una pregunta plz!

Algunos lenguajes de scripting están organizados para que si yo por ejemplo en un IF tengo dos condiciones separadas por dos operadores ANDs, si el primero es falso, no se ejecuta el siguiente. PHP lo hace así??

Última edición por kies89; 12/02/2013 a las 15:52
  #7 (permalink)  
Antiguo 12/02/2013, 16:15
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: Control de acceso (¿vulnerabilidad?)

buenas!!

si lo maneja, te recomiendo que leas el manual de php, encontraras muy buenas opciones del manejo de lo que quieres hacer

saludos!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!

Etiquetas: control
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 13:46.