Lenguaje PHP

Login seguro PHP con MySQLi: Descargar

Login seguro PHP con MySQLi. La problemática actual se basa en la seguridad de nuestros sistemas y si observamos las estadísticas son miles de sitios que son violentados por accesos no deseados. Las historias de páginas hackeadas son numerosas en las noticias, los desarrolladores están buscando las mejores maneras de asegurar sus sitios. Sin embargo, los sistemas de login para acceder al sistema son los lugares preferidos por personas mal intencionadas.

Si vuestro sitio tiene un sistema de usuarios o un buscador de noticias, podrías estar en riesgo grave de ser vulnerado y los datos de tus usuarios podrían verse comprometidos severamente. Esta articulo mostrará un intento de hacer un login seguro con PHP. Por lo tanto, podemos haber perdido algunos concejos en nuestro código.

Login seguro PHP con MySQLi

A continuación, se muestra una lista de posibles ataques que este tutorial intenta opacar contra:

  • Inyecciones SQL
  • Hacking de sesión
  • Escucha de red
  • Cross Siete Scripting
  • Ataques de fuerza bruta
Login PHP con MySQLi
Login PHP con MySQLi

Cosas que se necesitará para lograr nuestro cometido.

Como vamos a usar el conjunto mysqli_ * de clases PHP para acceder a nuestra base de datos MySQL necesitaremos las siguientes versiones de PHP y mySQL.

  • PHP versión 5.3 o posterior
  • MySQL versión 4.1.3 o posterior

Ejemplo #01 Login de usuario

– Crear nuestra base de datos y tablas

CREATE DATABASE IF NOT EXISTS `login` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `login`;
--
-- Estructura de tabla para la tabla `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  `email` varchar(60) NOT NULL,
  `password` varchar(60) NOT NULL,
  `social_id` varchar(100) NOT NULL,
  `picture` varchar(250) NOT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY  (`user_id`),
  KEY `email` (`email`),
  KEY `login` (`password`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

– La conexion con la base de datos y sesiones

<?php 
ob_start();
session_start();
require_once 'config.php'; 
?>
<?php 
    if( !empty( $_POST )){
        try {
            $user_obj = new Cl_User();
            $data = $user_obj->login( $_POST );
            if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']){
                header('Location: home.php');
            }
        } catch (Exception $e) {
            $error = $e->getMessage();
        }
    }
    //print_r($_SESSION);
    if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']){
        header('Location: home.php');
    }
?>
Login seguro php con mysqli
Login seguro php con mysqli

Nota:

Al recibir comentarios acerca del script se optó por actualizar algunas brechas de seguridad.

Bueno, espero que les sirva el código.

Descargar Script Login PHP

Referencia

How-secure

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

43 comentarios

  1. Al cargar la página de iniciar la sesión con localhost/login me sale el siguiente error:

    Deprecated: __autoload() is deprecated, use spl_autoload_register()
    instead in c:\xampp\htdocs\login\config.php en line 11

    Por que me sale este error al cargar el formulario login que puede ser sr. Tapia Ayudeme por favor mi correo es pantojacrispin@gmail.com

    1. con esto solucionas el problema

      spl_autoload_register(‘mi_autoloader’);
      function mi_autoloader($class)
      {
      $parts = explode(‘_’, $class);
      $path = implode(DIRECTORY_SEPARATOR,$parts);
      require_once $path . ‘.php’;
      }

  2. Nestor es importante que envíes con cada proyecto como van ordenados y colocados los archivos y programas y las carpetas, ya que he visto en varias personas que no les funciona por las rutas, claro que al no cambiar la ruta no va a funcionar el código.

    En el proyecto de Niveles de Usuarios si colocaste un print de pantalla de como van colocados los archivos. Gracias por compartir tu código soy programador nuevo de php , pero tengo amplia experiencia en otros lenguajes y me funcionó todo bien.

  3. Usar los action de los formularios con PHP_SELF implica que alguien te pueda hacer inyection sql.
    Por ejemplo si uso la siguiente dirección de tu script + el siguiente código https://miurl//%22%3E%3Cscript%3Ealert('HOLA‘)%3C
    /script%3E%3Cfoo%22

    Te abriré un mensaje diciendo HOLA, pero podrían hacer algo mucho más grave.

    Espero le sirvan de ayuda e intentaría corregirlo.
    Un saludo

  4. Hola Nestor.
    Desde Argentina, no puedo realizar pagos a travez de PayPal, por disposiciones del Banco Central.
    Hay algun otro medio en que pueda pagarte para descargar el paquete?
    Muchas gracias!
    D.

  5. Buenas, tengo el mismo problema que Emmanuel. Tengo todos los datos puestos en el archivo de configuración pero al intentar registrar un nuevo usuario o queres hacer login no deja. No muestra ningun error.
    Mi versión de PHP es 7.2, he modificado la función __autoload($class) por spl_autoload_register(); ya que dicha función el php 7.2 ya no existe, pero sigue sin hacer nada.
    Alguna idea de lo que puede estar pasando?
    Gracias y un saludo

  6. Hola te consulto.. el contenido dentro de inicio o la otra opcion, intente agregar diferentes imagenes y se ven todas hasta que se corta y despues no se ven mas, como qeu el contenido visual no se puede agrandar mas para abajo. alguna solucion?

    1. Hola emiliano.

      Tienes que editar los estilos CSS y manejar la altura del contenedor.
      Con eso podras agregar las imagenes que desees.

          1. hola tengo de nuvo el problema se conecta correctamente a mi base de datos pero al tratar de registrar un nuevo usuario no me vota nada, no hace nada el formulario sabes que puede ser.

    1. Hola Emmanuel

      Tienes que cumplir algunos requisitos, como tener una base de datos, version PHP 7
      Además, configurar el fichero config.php con las credenciales de MySQL.

      Si continuas teniendo problemas, envíame mas detalles de como estas implementando el script

      1. tengo mi base de datos local y productivo, configuro el config todo bien. no tengo ni un error. ingreso manual los datos a la tabla y me dice que el correo ya existe eso quiere decir que la conexion esta bien. pero no logro registrar un usuario de la web.

  7. A un logre explotar un vulnerabilidad de código tu codigo solo resuelve un parte mas pero a un si te pueden cerra la session varias veces remotamente.

  8. Hola tengo tengo un pequeño problema, al inciar sesion me carga el siguiente mensaje Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\login_seguro_php_mysqli (1)\login\Cl\User.php on line 84
    y 85 que es $data = mysqli_fetch_assoc($result); y el $count = mysqli_num_rows($result); ya habia hecho conexion desde la base de datos y cree el usuario desde ahi tambien, saludos de antemano

  9. Hay un grave error, si envías el formulario con el correo o email incorrectos te saldrá el mensaje en rojo, pero algo que se tomo por alto es que si luego de hacer eso vas la pestaña home, se abrirá sin nombre, pasa que se envió el post sin datos y por haber enviado el post cambio a true. creas una session sin datos. No es un login seguro.

    1. Hola Joel

      Primeramente agradecerte por tu comentario, efectivamente ya lo he revisado y se ha corregido ese inconveniente.

      Un saludo a la distancia.

  10. Buenos días y gracias de antemano.
    Nada más intentar logearme, me aparece el error
    Fatal error: Uncaught Error: Class ‘Cl_User’ not found in index.php linea 9

  11. Estimado Nestor, el inconveniente que tengo, no se activa el Menu de Mi cuenta Y salir en la pagina donde despliego la información, gracias de antemano

  12. Estimado Nestor, gracias por tu gran aporte, necesito que al iniciar sesión se envie a otra pagina que esta en otra carpeta dentro del localhost, es un sistema de manejo de información, como puedo acerlo, gracias de antemano por tu ayuda.

    1. Hola Patricio,

      Solo tienes que llamar a este fichero y darle la ruta correcta si lo deseas en otra carpeta

      Con esta declaración en la parte superior ya el fichero tendria sesion de usuario.

      Espero haberte ayudado, un saludo a la distancia.

      1. Gracias Nestor por tu ayuda, el inconveniente que tengo es el siguiente: en la pagina donde despliego toda la información no se activa el Menu de Mi cuenta y Salir.. por fa puedes enviarme tu direccion de correo para adjuntarte screen del problema, gracias de antemano.

    1. Saludos Claudio,

      El sistema login seguro no tiene usuarios, si lo has instalado y vinculado con la base de datos correctamente, tienes que crear el usuario en el vinculo registrarse.

      Espero haberte ayudado, que tengas un excelente día.

  13. Todo perfecto y completo salvo el header que me daba error el la línea 42 (Strict standards: Only variables should be passed by reference). Lo solucioné quitando el «end» del explode.
    Muchas gracias por tu ejemplo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba