Foros del Web » Programando para Internet » PHP »

autentificacion y session

Estas en el tema de autentificacion y session en el foro de PHP en Foros del Web. Buenas a todos, hice un formulario de login en el cual anteriormente una vez comprobado el usuario y el password lo guardaba en session para ...
  #1 (permalink)  
Antiguo 19/10/2008, 04:39
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
autentificacion y session

Buenas a todos, hice un formulario de login en el cual anteriormente una vez comprobado el usuario y el password lo guardaba en session para posteriormente aceder a las demás webs, pero me di cuenta que si me declaraba una session con el mismo nombre de usuario y password en otro fichero podia entrar a todas las zonas!!!! entonces rectefique todo... para que cada vez que entrara a una zona comprobara el usuario y contraseña, si existen pues entra sino mostraba el formulario de login.

Crees que he echo bien ?, En cada pagina tengo que hacer la comprobacion del usser y pass.....no me aclaro aún co las sessions :S

ahh otra de las cosas esque ahora los usuarios no se me desconectan cuando pasa un tiempo hasta que ellos no cierren el navegador o le den a salir que entonces es cuando destruyen una session que es donde guardo el usuario y el password.
  #2 (permalink)  
Antiguo 19/10/2008, 04:49
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

Creo que no

con hacer un if
Código PHP:
session_start();

if (isset 
$_SESSION['nombre_sesion']){

//muestras la pagina

}
else
{

// mandas al registro


lo tienes a si mas o menos en todas la paginas?
  #3 (permalink)  
Antiguo 19/10/2008, 05:03
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: autentificacion y session

Bueno más o menos, a las pag que redireciono con un swich lo tengo asi

Código:
		case 'settings';
		if ($_SESSION['cookie'] == "cadena de caracteres"){
			$admin=new Administrador();
			$admin->setEmail($_SESSION['mail']);
			$admin->setPassNoCifrado($_SESSION['pwd']);
			$resultado=$admin->login_admin() ;

			if (mysql_num_rows($resultado) == 1)
				$result = 1;
			else
				$result = 0;

			if ($result == 1)
				include_once "./settings/settings_portal.php";
			else{
				session_destroy();
				include_once "identificacion.php";
			}
		}else{
			session_destroy();
			include_once "identificacion.php";
		}
		break ;

Código:
Function login_admin ($mail, $pwd){
	$admin=new Administrador();
	$admin->setEmail($mail);
	$admin->setPassNoCifrado($pwd);
	$resultado=$admin->login_admin() ;

	$_SESSION['mail'] = $mail ;
	$_SESSION['pwd'] = $pwd ;

	$row = mysql_fetch_row($resultado);
		$id=$row[0] ;
		$identificador=$row[2] ;

	if (mysql_num_rows($resultado) == 1)
		$result = 1;
	else
		$result = 0;

	if ($result == 1 && $identificador == 0){
	        $_SESSION['cookie'] = "cadena de caracteres" ;
		include_once "./settings/settings_portal.php";
	}
	else{
		if (($identificador) != 0)
			echo "<span class='text_warning gray'>Su cuenta fue Banneada.</span>" ;
		else
			echo "<span class='text_warning gray'>Error de la clave.</span>";
		session_destroy();
	}
}
$_SESSION['cookie'] es una cadena de caracteres que me invto para poder acceder a los if
  #4 (permalink)  
Antiguo 19/10/2008, 05:16
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

Pues yo si la pass no esta codificada, no la guardaria en una variable de sesion, no es seguro para tus user's, tienes su pass, andando de pagina en pagina.
  #5 (permalink)  
Antiguo 19/10/2008, 05:18
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

Cita:
Iniciado por nfo Ver Mensaje

ahh otra de las cosas esque ahora los usuarios no se me desconectan cuando pasa un tiempo hasta que ellos no cierren el navegador o le den a salir que entonces es cuando destruyen una session que es donde guardo el usuario y el password.
busca informacion sobre el tiempo de sesiones y le pones un tiempo, si despues de ese tipempo no hay actividad, se destruira su sesion
  #6 (permalink)  
Antiguo 19/10/2008, 05:18
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: autentificacion y session

mmmmm.... y si le meto el pass codificado ?
  #7 (permalink)  
Antiguo 19/10/2008, 05:23
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

Pues si

pero codificala tambien en las consultas de la pass en la bbdd, para no tener problemas de autentificacion

puedes usar md5.
  #8 (permalink)  
Antiguo 19/10/2008, 05:29
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: autentificacion y session

sisis eso si lo hago.....

por lo demás lo ves bien ?.

El tema de iyection sql eso es otra tema jijiji.... De momento he estado haciendo pruebecillas y "parece" que no es vunerable.....

Ya que logeo con el mail y antes hago comprobacion con Javascript que tenga la @ etc....

GRacias!!!
  #9 (permalink)  
Antiguo 19/10/2008, 05:44
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

Te dejo un par de funciones para pasar a variables que vengan de lo imputs de un form, que me dieros en este foro.

Código PHP:

<?php 

function RemoveXSS($val) { 
   
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed 
   // this prevents some character re-spacing such as <java\0script> 
   // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs 
   
$val preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/'''$val); 
    
   
// straight replacements, the user should never need these since they're normal characters 
   // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29> 
   
$search 'abcdefghijklmnopqrstuvwxyz'
   
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   
$search .= '1234567890!@#$%^&*()'
   
$search .= '~`";:?+/={}[]-_|\'\\'
   for (
$i 0$i strlen($search); $i++) { 
      
// ;? matches the ;, which is optional 
      // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars 
    
      // &#x0040 @ search for the hex values 
      
$val preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i'$search[$i], $val); // with a ; 
      // @ @ 0{0,7} matches '0' zero to seven times 
      
$val preg_replace('/({0,8}'.ord($search[$i]).';?)/'$search[$i], $val); // with a ; 
   

    
   
// now the only remaining whitespace attacks are \t, \n, and \r 
   
$ra1 = Array('javascript''vbscript''expression''applet''meta''xml''blink''link''style''script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base'); 
   
$ra2 = Array('onabort''onactivate''onafterprint''onafterupdate''onbeforeactivate''onbeforecopy''onbeforecut''onbeforedeactivate''onbeforeeditfocus''onbeforepaste''onbeforeprint''onbeforeunload''onbeforeupdate''onblur''onbounce''oncellchange''onchange''onclick''oncontextmenu''oncontrolselect''oncopy''oncut''ondataavailable''ondatasetchanged''ondatasetcomplete''ondblclick''ondeactivate''ondrag''ondragend''ondragenter''ondragleave''ondragover''ondragstart''ondrop''onerror''onerrorupdate''onfilterchange''onfinish''onfocus''onfocusin''onfocusout''onhelp''onkeydown''onkeypress''onkeyup''onlayoutcomplete''onload''onlosecapture''onmousedown''onmouseenter''onmouseleave''onmousemove''onmouseout''onmouseover''onmouseup''onmousewheel''onmove''onmoveend''onmovestart''onpaste''onpropertychange''onreadystatechange''onreset''onresize''onresizeend''onresizestart''onrowenter''onrowexit''onrowsdelete''onrowsinserted''onscroll''onselect''onselectionchange''onselectstart''onstart''onstop''onsubmit''onunload'); 
   
$ra array_merge($ra1$ra2); 
    
   
$found true// keep replacing as long as the previous round replaced something 
   
while ($found == true) { 
      
$val_before $val
      for (
$i 0$i sizeof($ra); $i++) { 
         
$pattern '/'
         for (
$j 0$j strlen($ra[$i]); $j++) { 
            if (
$j 0) { 
               
$pattern .= '('
               
$pattern .= '(&#[xX]0{0,8}([9ab]);)'
               
$pattern .= '|'
               
$pattern .= '|({0,8}([9|10|13]);)'
               
$pattern .= ')*'
            } 
            
$pattern .= $ra[$i][$j]; 
         } 
         
$pattern .= '/i'
         
$replacement substr($ra[$i], 02).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag 
         
$val preg_replace($pattern$replacement$val); // filter out the hex tags 
         
if ($val_before == $val) { 
            
// no replacements were made, so exit the loop 
            
$found false
         } 
      } 
   } 
   return 
$val



    
    function 
mysql_escape($cadena) {
    if(
get_magic_quotes_gpc() != 0) {
        
$cadena stripslashes($cadena);
    }
    return 
mysql_real_escape_string($cadena);
}  


?>
si usas las dos , creo que es dificil que te hagan sql injection

Un saludo
  #10 (permalink)  
Antiguo 19/10/2008, 05:48
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: autentificacion y session

dioss!!!.... pero .... me puedes explicar que devuelve ess funciones ?

las llamo antes de mi ?¿?¿

$resultado=$admin->login_admin() ;
  #11 (permalink)  
Antiguo 19/10/2008, 06:01
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

usalas despues de que el user se autentifique, que sera a traves de un form, digo yo.

$user = $_POST['user'];

$user = RemoveXSS ($user);
$user = mysql_escape($user);

lo unico que hacen es limpiar las variables que llegan mediante POST o GET
de codigo malicioso

por que como se logean tus user, con un form no?
  #12 (permalink)  
Antiguo 19/10/2008, 06:05
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: autentificacion y session

si por un form luego pasa a un javascript que detecta el mail con la @ .com .net o lo que sea que no este en blanco etc... y si todo se cumple hace la consulta

esta funcion la meto despues del js no ?
  #13 (permalink)  
Antiguo 19/10/2008, 06:52
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

si, antes de comparar los datos con la BBDD

y antes de introducirlos en la BBDD
  #14 (permalink)  
Antiguo 19/10/2008, 07:05
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: autentificacion y session

ya he arreglado lo de el encriptado del password, colega la funcion

RemoveXSS me da error aqui

Código:
$val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
tambien al introducir los datos ?

Gracias de nuevo jaronu
  #15 (permalink)  
Antiguo 19/10/2008, 07:15
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: autentificacion y session

la funcion remove XSS es para evitar ataque a tu base de datos, a mi no me da error

no se como la aplicas, y yo no hice esas funciones. y no soy un experto, como para saberlo todo sobre ellas.

Un saludo
  #16 (permalink)  
Antiguo 19/10/2008, 07:58
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: autentificacion y session

ya me funciona tiene un pequeño error en unas comillas.

Gracias compañero por tu ayuda. me has salocuionado mucho en el tema de seguridad


Código:
function RemoveXSS($val) {
   // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
   // this prevents some character re-spacing such as <java\0script>
   // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
   $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
   
   // straight replacements, the user should never need these since they're normal characters
   // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
   $search = 'abcdefghijklmnopqrstuvwxyz';
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $search .= '1234567890!@#$%^&*()';
   $search .= '~`";:?+/={}[]-_|\'\\';
   for ($i = 0; $i < strlen($search); $i++) {
      // ;? matches the ;, which is optional
      // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
   
      // &#x0040 @ search for the hex values
      $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
      // &#00064 @ 0{0,7} matches '0' zero to seven times
      $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
   }
   
   // now the only remaining whitespace attacks are \t, \n, and \r
   $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
   $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
   $ra = array_merge($ra1, $ra2);
   
   $found = true; // keep replacing as long as the previous round replaced something
   while ($found == true) {
      $val_before = $val;
      for ($i = 0; $i < sizeof($ra); $i++) {
         $pattern = '/';
         for ($j = 0; $j < strlen($ra[$i]); $j++) {
            if ($j > 0) {
               $pattern .= '(';
               $pattern .= '(&#[xX]0{0,8}([9ab]);)';
               $pattern .= '|';
               $pattern .= '|(&#0{0,8}([9|10|13]);)';
               $pattern .= ')*';
            }
            $pattern .= $ra[$i][$j];
         }
         $pattern .= '/i';
         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
         $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
         if ($val_before == $val) {
            // no replacements were made, so exit the loop
            $found = false;
         }
      }
   }
   return $val;
}
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 19:25.