Foros del Web » Programando para Internet » PHP »

sesión segura php

Estas en el tema de sesión segura php en el foro de PHP en Foros del Web. hola estoy haciendo una pagina web y dichas sesiones administraran digamos un saldo dinero que sera valido para mis clientes asi que estoy intentando hacer ...
  #1 (permalink)  
Antiguo 03/01/2018, 23:27
 
Fecha de Ingreso: febrero-2015
Ubicación: venezuela
Mensajes: 45
Antigüedad: 2 años, 10 meses
Puntos: 0
Exclamación sesión segura php

hola estoy haciendo una pagina web y dichas sesiones administraran digamos un saldo dinero que sera valido para mis clientes asi que estoy intentando hacer una función de php para iniciar sesión
quiero ver si le parece segura o no ? ya que yo no soy un experto en la materia en cuanto sesiones segura

no mostrare el html ya que eso es básico pero aquí la función que inicia sesión
Código PHP:
Ver original
  1. public function login($f)
  2.     {
  3.         //validamos campos vacios
  4.         if ($f->correo != "") {
  5.             if ($f->pass != "") {
  6.                 // validamos fomrato de correo electronico
  7.                 if (filter_var($f->correo, FILTER_VALIDATE_EMAIL)) {
  8.                     $correo1    = $this->con->real_escape_string(trim(strtolower($f->correo)));
  9.                     $resultados = $this->con->query("SELECT * FROM  user WHERE correo='$correo1'");
  10.                     $data       = $resultados->fetch_array(MYSQLI_ASSOC);
  11.                     $correo2    = $data['correo'];
  12.                     $clave      = $data['clave'];
  13.                     $resultados->close();
  14.                     if (password_verify($f->pass, $clave) and $correo1 == $correo2) {
  15.                         session_start();
  16.                         $_SESSION['user_emeil'] = $data['correo'];
  17.                         $_SESSION['user_id']    = $data['id'];
  18.                         $_SESSION['user_name']  = $data['nombre'];
  19.                         $_SESSION['segure']     = md5(rand() . $_SESSION['user_emeil']);
  20.                         $token                  = $this->con->query("UPDATE user SET segure ='{$_SESSION['segure']}' WHERE id='{$_SESSION['user_id']}'");
  21.                         echo "2";
  22.  
  23.                     } else {
  24.                         echo "<div id='mensaje' class='alert alert-danger'>Correo Electrónico o Contraseña incorrectas.</div>";
  25.                     }
  26.                 } else {
  27.                     echo "<div id='mensaje' class='alert alert-danger'>El Correo Electrónico es invalido.</div>";
  28.                 }
  29.             } else {
  30.                 echo "<div id='mensaje' class='alert alert-danger'>El campo Contraseña esta vació.</div>";
  31.             }
  32.         } else {
  33.             echo "<div id='mensaje' class='alert alert-danger'>El campo Correo Electrónico esta vació.</div>";
  34.         }
  35.  
  36.     }

y aquí la función que chequea las sesiones esta incluido en todas las paginas que solo serán visible al usuario registrado
Código PHP:
Ver original
  1. public function CheckSesion()
  2.     {
  3.         if (!empty($_SESSION['user_id']) && !empty($_SESSION['segure'])) {
  4.  
  5.             //quitamos el posible SQLInjection del user y password
  6.             $_SESSION['user_id'] = $this->con->real_escape_string($_SESSION['user_id']);
  7.             $_SESSION['segure']  = $this->con->real_escape_string($_SESSION['segure']);
  8.  
  9.             //checamos que exista
  10.             $chequear = $this->con->query("SELECT * FROM user WHERE id = '{$_SESSION['user_id']}' and segure = '{$_SESSION['segure']}'");
  11.             $existe   = $chequear->num_rows;
  12.             if ($existe == 1) {
  13.                 //volvemos a calcular un segure
  14.                 $prueva             = $_SESSION['segure'];
  15.                 $_SESSION['segure'] = md5(rand() . $_SESSION['user_emeil']);
  16.                 $token              = $this->con->query("UPDATE user SET segure ='{$_SESSION['segure']}' WHERE id='{$_SESSION['user_id']}'");
  17.                 $chequear->close();
  18.  
  19.             } else {
  20.                 session_destroy();
  21.                 header("Location:../account.php");
  22.                 exit;
  23.             }
  24.  
  25.         } else {
  26.             session_destroy();
  27.             header("Location:../account.php");
  28.             exit;
  29.         }
  30.     }

en el formulario de inicio sesión el chequeo por si ya esta logiado solo redirecciona a la pagina de bienvenido usuario y en bienvenido usuario es donde se comprueba la sesion
Código PHP:
Ver original
  1. <?php
  2. if (!empty($_SESSION['user_id']) && !empty($_SESSION['segure'])) {
  3.  
  4.     header("Location:user/index.php");
  5.  
  6. } else {
  7. }
  8.  
  9. ?>
  #2 (permalink)  
Antiguo 10/01/2018, 12:51
 
Fecha de Ingreso: octubre-2009
Mensajes: 275
Antigüedad: 8 años, 3 meses
Puntos: 24
Respuesta: sesión segura php

no estas protegido contra SQL Inyection, utilice consultas preparadas
  #3 (permalink)  
Antiguo 10/01/2018, 14:01
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.762
Antigüedad: 9 años, 5 meses
Puntos: 2117
Respuesta: sesión segura php

En teoría, está bien, el único problema que veo es que no revisas si la consulta devuelve resultados:

Código PHP:
Ver original
  1. $resultados = $this->con->query("SELECT * FROM  user WHERE correo='$correo1'");
  2.     // Aquí falta revisar:
  3.    if($resultados->num_rows != 1) {
  4.        // No se encontró el registro
  5.        // o, probablemente, hay 2 o más cuentas con el mismo correo
  6.        // Eso depende de tu desarrollo
  7.    }
  8.     $data       = $resultados->fetch_array(MYSQLI_ASSOC);

sustentio, ciertamente es mejor el uso de consultas preparadas, pero sí está protegido contra inyecciones SQL, para eso se usa ->real_escape_string()
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 11/01/2018, 11:12
 
Fecha de Ingreso: octubre-2009
Mensajes: 275
Antigüedad: 8 años, 3 meses
Puntos: 24
Respuesta: sesión segura php

@Triby tienes razón, ni los vi



La zona horaria es GMT -6. Ahora son las 10:53.