Foros del Web » Programando para Internet » PHP »

Página protegida, no puedo ingresar

Estas en el tema de Página protegida, no puedo ingresar en el foro de PHP en Foros del Web. Hola estimados todos... hace un tiempo tenia funcionando bien un formulario de inicio de sesión para administrador, pero un seudo “experto” le echo mano para ...
  #1 (permalink)  
Antiguo 15/09/2016, 20:52
Avatar de marciano_79  
Fecha de Ingreso: agosto-2009
Mensajes: 88
Antigüedad: 14 años, 8 meses
Puntos: 0
Página protegida, no puedo ingresar

Hola estimados todos... hace un tiempo tenia funcionando bien un formulario de inicio de sesión para administrador, pero un seudo “experto” le echo mano para mayor seguridad y ahora no sé qué es lo que hizo que no me deja ingresar…
Les dejo los script, haber si alguien puede ayudarme a observar qué errores hay… estuve haciendo pruebas como de usuarios y contraseñas y todo funciona bien, el problema radica en la función que protege el acceso a la página… “es lo que creo”

Dejo los codigos a continuación...

INDEX.PHP
Código PHP:
Ver original
  1. require('conexion.php');
  2. sec_session_start(); // Esta funcion detiene a JavaScript en ataques a la identificación de la sesión. 
  3.  
  4.     if (login_check($cnx) == true){
  5.         header("Location: ver.php");
  6.     }
  7.  
  8.     if (isset($_POST['email'], $_POST['password'])) {
  9.         $email = mysqli_real_escape_string($cnx,$_POST['email']);
  10.         $password = mysqli_real_escape_string($cnx,$_POST['password']);
  11.         $error = '';
  12.        
  13.         $sha1_pass = sha1($password);
  14.    
  15.     if (login($email, $sha1_pass, $cnx) == true) {
  16.         // Login success
  17.         header("Location: ver.php");
  18.         exit();
  19.         } else {
  20.             $error = "El nombre o contraseña son incorrectos";
  21.         }
  22. }
Código HTML:
Ver original
  1. <form action="<?php $_SERVER['PHP_SELF']; ?>"  method="post">
  2.                         <h1>Login</h1>
  3.                         <div>
  4.                             <input  name="email" type="text" placeholder="Usuario">
  5.                         </div>
  6.                         <div>          
  7.                             <input  name="password" type="password" id="password" placeholder="Password">
  8.                         </div>
  9.                         <div>
  10.                             <label>
  11.                                 <input type="checkbox" name="remember_me">
  12.                                 Recuerdame
  13.                             </label>
  14.                         </div>
  15.                         <input type="submit" value="Entrar"/>
  16.                     </form>

FUNCIONES.PHP
Código PHP:
Ver original
  1. function sec_session_start() {
  2.     $session_panel_admin = 'user_id';   // Configura sesión personalizado.
  3.     $secure = 'SECURE';
  4.     // Esto detiene que JavaScript sea capaz de acceder a la identificación de la sesión.
  5.     $httponly = true;
  6.     // Obliga a las sesiones a solo utilizar cookies.
  7.     if (ini_set('session.use_only_cookies', 1) === FALSE) {
  8.         header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
  9.         exit();
  10.     }
  11.     // Obtiene los params de los cookies actuales.
  12.     $cookieParams = session_get_cookie_params();
  13.     session_set_cookie_params($cookieParams["lifetime"],
  14.         $cookieParams["path"],
  15.         $cookieParams["domain"],
  16.         $secure,
  17.         $httponly);
  18.     // Configura el nombre de sesión al configurado arriba.
  19.     session_name($session_panel_admin);
  20.     session_start();            // Inicia la sesión PHP.
  21.     session_regenerate_id();    // Regenera la sesión, borra la previa.
  22. }
  23.  
  24.  
  25.  
  26.  
  27. function login($email, $sha1_pass, $cnx) {
  28.     // Usar declaraciones preparada - inyección de SQL no será posible.
  29.     if ($stmt = $cnx->prepare("SELECT ID_USUARIO, NOMBRE, PASSWORD
  30.        FROM usuarios
  31.       WHERE EMAIL = ?
  32.        LIMIT 1")) {
  33.         $stmt->bind_param('s', $email);  // Une “$email” al parámetro.
  34.         $stmt->execute();    // Ejecuta la consulta preparada.
  35.         $stmt->store_result();
  36.        
  37.         // Obtiene las variables del resultado..
  38.         $stmt->bind_result($user_id, $username, $db_password);
  39.         $stmt->fetch();
  40.        
  41.         if ($stmt->num_rows == 1) {
  42.  
  43.         if ($db_password == $sha1_pass) {  
  44.         //¡La contraseña es correcta!
  45.         //Obtén el agente de usuario del usuario.
  46.             $user_browser = $_SERVER['HTTP_USER_AGENT'];
  47.         // Protección XSS ya que podríamos imprimir este valor.
  48.             $user_id = preg_replace("/[^0-9]+/", "", $user_id);
  49.             $_SESSION['user_id'] = $user_id;
  50.  
  51.         // Protección XSS ya que podríamos imprimir este valor.
  52.             $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);
  53.  
  54.             $_SESSION['username'] = $username;
  55.             $_SESSION['login_string'] = ($sha1_pass . $user_browser);
  56.  
  57.         // Inicio de sesión exitoso.
  58.             return true;
  59.             } else {
  60.                 return false;
  61.             }
  62.         }
  63.     }
  64. }

El problema creo que radica en esta parte de la función login_check..

Código PHP:
Ver original
  1. function login_check($cnx) {
  2.     // Revisa si todas las variables de sesión están configuradas.
  3.     if (isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) {
  4.        $user_id = $_SESSION['user_id'];
  5.        $username = $_SESSION['username'];
  6.        $login_string = $_SESSION['login_string'];
  7.        
  8.  
  9.         // Obtiene la cadena de agente de usuario del usuario.
  10.     $user_browser = $_SERVER['HTTP_USER_AGENT'];
  11.  
  12.     if ($stmt = $cnx->prepare("SELECT PASSWORD
  13.                   FROM usuarios
  14.                   WHERE ID_USUARIO = ? LIMIT 1")) {
  15.         // Une “$user_id” al parámetro.
  16.             $stmt->bind_param('i', $user_id);
  17.             $stmt->execute();   // Ejecuta la consulta preparada.
  18.             $stmt->store_result();
  19.  
  20.             if ($stmt->num_rows == 1) {
  21.                 // Si el usuario existe, obtiene las variables del resultado.
  22.                 $stmt->bind_result($sha1_pass);
  23.                 $stmt->fetch();
  24.                 $login_check = $sha1_pass;
  25.  
  26.                 if ($login_check == $login_string) {
  27.                     // ¡¡Conectado!!
  28.                     return true;
  29.                 } else {
  30.                     // No conectado.
  31.                     return false;
  32.                 }
  33.             } else {
  34.                 // No conectado.
  35.                 return false;
  36.             }
  37.         } else {
  38.             // Could not prepare statement
  39.             header("Location: ../error.php?err=Database error: cannot prepare statement");
  40.             exit();
  41.         }
  42.     } else {
  43.         // No conectado.
  44.         return false;
  45.    }
  46. }

Y esta es la pagina protegida

VER.PHP
Código PHP:
Ver original
  1. require('conexion.php');
  2. include_once 'includes/functions.php';
  3. sec_session_start();
  4. <?php if (login_check($cnx) == true) : ?>
  5.         <p>Bienvenido <?php echo ($_SESSION['username']); ?>!</p>
  6.             <p>
  7.              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  8.             </p>
  9.             <p>Retornar a <a href="index.php">Página de acceso</a></p>
  10.         <?php else : ?>
  11.             <p>
  12.                 <span class="error">Usted no esta autorizado al acceso de esta página.</span> Favor <a href="index.php">Inicie sesión</a>.
  13.             </p>
  14.         <?php endif; ?>

Cualquier info, quedo muy agradecido... ojala me puedan ayudar! saludos a todos..
  #2 (permalink)  
Antiguo 16/09/2016, 03:07
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Página protegida, no puedo ingresar

Estaría bien que nos indica ses el comportamiento del Script, si da algún error y tal. Y que diferencias hay con el Script anterior.
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 16/09/2016, 03:57
Avatar de marciano_79  
Fecha de Ingreso: agosto-2009
Mensajes: 88
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Página protegida, no puedo ingresar

Hola estimado… la verdad ya no podre hacer nada con esta cosa, la persona que page para que me creara el formulario brilla por su ausencia.. hace poco me di cuenta que faltan script... modificó de tal forma mi formulario que ni siquiera realizo un respaldo del mismo.. y bueno también es mi culpa, no tener esa precaución y ser confiado… gracias amigo por intentar ayudarme, veré como hago un nuevo formulario, aunque sea algo más sencillo..! Saludos..
  #4 (permalink)  
Antiguo 16/09/2016, 06:02
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Página protegida, no puedo ingresar

Pero cual es el error o que es lo que hace. Desconozco tus conocimientos pero seguro que puedes ser un poco más explicativo sobre el problema en cuestión. Y con un poco de paciencia seguro alguien te puede ayudar por aquí.

Pero piensa que generalmente no vamos a ejecutar el código en nuestra máquina, lo haremos mentalmente y siempre ayuda saber donde te está dando el problema exactamente.
__________________
Unset($vida['malRollo']);
  #5 (permalink)  
Antiguo 16/09/2016, 06:40
Avatar de marciano_79  
Fecha de Ingreso: agosto-2009
Mensajes: 88
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Página protegida, no puedo ingresar

Ok amigo gracias.. mira el problema en cuestion era que yo tenia un inicio de sesion para un admin muy simple (vulnerable) en todo aspecto.. por ello busque quien me ayudara a darle más seguridad.. pero lo dejaron mal, muy mal diria yo...

Ahora estoy modificando esta cosa... te dejo el script de los que tengo..

index.php (donde esta el formulario)
Código PHP:
Ver original
  1. require('_conex.php');
  2. include ('includes/funciones.php');
  3.  
  4. sec_session_start();
  5.    
  6.     if(isset($_SESSION["id_usuario"])){
  7.         header("Location: ver.php");
  8.     }
  9.    
  10.     if(!empty($_POST))
  11.     {
  12.         $email = mysqli_real_escape_string($cnx,$_POST['email']);
  13.         $password = mysqli_real_escape_string($cnx,$_POST['pass']);
  14.         $error = '';
  15.        
  16.         $sha1_pass = sha1($password);
  17.        
  18.         $consulta = "SELECT ID_USUARIO, NOMBRE FROM usuario_admin WHERE EMAIL = '$email' AND PASSWORD = '$sha1_pass'";
  19.         $result=$cnx->query($consulta);
  20.         $rows = $result->num_rows;
  21.        
  22.         if($rows > 0) {
  23.             $row = $result->fetch_assoc();
  24.             $_SESSION['id_usuario'] = $row['ID_USUARIO'];
  25.             $_SESSION['nombre'] = $row['NOMBRE'];
  26.            
  27.             header("location: ver.php");
  28.             } else {
  29.             $error = "El nombre o contraseña son incorrectos";
  30.         }
  31.     }

y el archivo funciones.php

Código PHP:
Ver original
  1. function sec_session_start() {
  2.     $session_admin_panel = 'id_usuario';   // Set a custom session name
  3.     $secure = "SECURE";
  4.  
  5.     // detengo JavaScript para intentos de accion.
  6.     $httponly = true;
  7.  
  8.    
  9.     if (ini_set('session.use_only_cookies', 1) === FALSE) {
  10.         header("Location: ../index.php");
  11.         exit();
  12.     }
  13.  
  14.  
  15.     $cookieParams = session_get_cookie_params();
  16.     session_set_cookie_params($cookieParams["lifetime"],
  17.     $cookieParams["path"],
  18.     $cookieParams["domain"],
  19.     $secure,
  20.     $httponly);
  21.  
  22.    
  23.     session_name($session_admin_panel);
  24.  
  25.     session_start();            // inicio sesion
  26.     session_regenerate_id();    //regenero nueva sesion
  27. }

hasta aqui todo bien.. ahora mi problema que tengo de fondo es asegurar el archivo ver.php

Donde estaría el panel.. lo que no puedo hacer es crear una función que evite el ingreso a esta página vía url.. saltándose el login y la idea es que los vuelva a redirigir al index en caso de que se intente.... y yo no tengo idea como trabajar funciones para este caso.. Gracias por tu buena disposición.!

Etiquetas: formulario, mysql, página, select, sql, usuarios, variable
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 01:40.