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, 22:27
 
Fecha de Ingreso: febrero-2015
Ubicación: venezuela
Mensajes: 50
Antigüedad: 3 años, 4 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, 11:51
 
Fecha de Ingreso: octubre-2009
Mensajes: 288
Antigüedad: 8 años, 8 meses
Puntos: 25
Respuesta: sesión segura php

no estas protegido contra SQL Inyection, utilice consultas preparadas
  #3 (permalink)  
Antiguo 10/01/2018, 13:01
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.842
Antigüedad: 9 años, 10 meses
Puntos: 2141
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, 10:12
 
Fecha de Ingreso: octubre-2009
Mensajes: 288
Antigüedad: 8 años, 8 meses
Puntos: 25
Respuesta: sesión segura php

@Triby tienes razón, ni los vi
  #5 (permalink)  
Antiguo 08/04/2018, 23:13
 
Fecha de Ingreso: febrero-2015
Ubicación: venezuela
Mensajes: 50
Antigüedad: 3 años, 4 meses
Puntos: 0
De acuerdo Respuesta: sesión segura php

Cita:
Iniciado por Triby Ver Mensaje
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()
Gracias por responder y disculpa lo tarde que responder y bueno en cierto sentido tienes razón me falto verificar que me devuelva algún resultado aunque de mi punto de vista no lo vi necesario no se qué opinan la comunidad del foro, para mí solo se cumple dos condiciones por la cuan no devuelva resultados 1 que por cosas del destino haya un error con la base de dato o no se la conexión y la consulta no se ejecute, el segundo caso por el cual no devolvería resultado es que no exista el correo pero si el correo no existe no pasa la verificación de la contraseña por lo tanto no se iniciaría sesión y me imprime un echo con usuario y contraseña incorrecta, puesto que el algoritmo de registro de usuario verifica que en la base de dato no exista correo iguales al momento de registrar entonces no me arrojaría más de dos resultados por la simple razón que no puede existir dos correos iguales en la base de dato
  #6 (permalink)  
Antiguo 09/04/2018, 00:53
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.346
Antigüedad: 3 años
Puntos: 252
Respuesta: sesión segura php

Bueno una validación nunca esta demás no, además si no existe el email y no válidas eso como dice triby, las siguientes variables entran en error automaticamente:

Código PHP:
Ver original
  1. $data       = $resultados->fetch_array(MYSQLI_ASSOC);
  2. $correo2    = $data['correo'];
  3. $clave      = $data['clave'];

también sería bueno utilizar un try catch para generar excepciones en caso de errores críticos
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 09/04/2018, 07:12
 
Fecha de Ingreso: febrero-2015
Ubicación: venezuela
Mensajes: 50
Antigüedad: 3 años, 4 meses
Puntos: 0
Respuesta: sesión segura php

Cita:
Iniciado por xfxstudios Ver Mensaje
Bueno una validación nunca esta demás no, además si no existe el email y no válidas eso como dice triby, las siguientes variables entran en error automaticamente:


también sería bueno utilizar un try catch para generar excepciones en caso de errores críticos
cierto modo pues tienes razón pero la verdad exista o no exista el correo no me entra ningún error de igual manera ese inicio pinzo cambiar la estructura de las condiciones if así que en su momento le agregare dicha comprobacion en este momento me encuentro con dudas en otra cosa y estoy usando mi tiempo libre para ello



La zona horaria es GMT -6. Ahora son las 17:42.