Cómo proteger sesiones PHP con contraseñas MySQL

Escrito por steve mcdonnell Google | Traducido por luis alberto fuentes schwab
  • Comparte
  • Twittea
  • Comparte
  • Pin
  • E-mail
Cómo proteger sesiones PHP con contraseñas MySQL
Cómo proteger sesiones PHP con contraseñas MySQL. (Ablestock.com/AbleStock.com/Getty Images)

Cuando un usuario ejecuta una aplicación PHP, puedes crear una sesión de PHP para ese usuario. La sesión le da la capacidad para definir variables y almacenar datos específicos de esa sesión de usuario que puede ser accedida a través de varias páginas web. Las sesiones de PHP se utilizan típicamente en conjunción con el requisito de que un usuario acceda a una aplicación. Puedes crear esta funcionalidad con un formulario HTML y una base de datos MySQL que almacene los nombres de usuario y contraseñas. Al hacer esto, estarás asegurando la sesión de PHP con las contraseñas almacenadas en una base de datos MySQL.

Nivel de dificultad:
Difícil

Otras personas están leyendo

Instrucciones

    Crear la base de datos MySQL

  1. 1

    Crea una nueva base de datos MySQL para albergar la tabla de combinaciones de nombre de usuario y contraseña. Por ejemplo, inicia sesión en MySQL en la línea de comandos y escribe:

    CREATE DATABASE security DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  2. 2

    Crea la tabla MySQL para almacenar un nombre de usuario y una contraseña para cada usuario. Por ejemplo, en la línea de comandos escribe:

    CREATE TABLE security.users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT , username VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , password VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , PRIMARY KEY ( id ) ) ENGINE = MYISAM;

  3. 3

    Rellena la tabla con al menos una entrada inicial para el usuario administrativo. Utiliza la función "md5" para cifrar la contraseña antes de almacenarla en la base de datos. Por ejemplo, escribe en la línea de comandos:

    INSERT INTO security.users (id, username, password) VALUES (NULL, "admin", md5("Password3*"));

    Crear y mostrar el formulario de acceso

  1. 1

    Crea un nuevo archivo PHP usando un editor HTML o Bloc de notas que presentará un formulario de acceso para el usuario, determina si el nombre de usuario y la contraseña son correctos y direcciona al usuario a la URL guardada en la variable de sesión llamada "nexturl". Inicia una sesión de PHP y comprueba una variable de sesión para determinar si el usuario ya está conectado o inicializa la variable de sesión. Por ejemplo, escribe en el editor:

    <?php session_start(); if (!isset($_SESSION['authorized'])) $_SESSION['authorized'] = false; if ($_SESSION['authorized'] === true) header("Location: " . $_SESSION['nexturl']); //already logged in

  2. 2

    Obtén el nombre de usuario y contraseña del formulario de acceso o establécelo en null si el formulario no ha sido procesado. Por ejemplo, escribe en el editor:

    $username = $_POST['username'] || ""; $password = $_POST['password'] || ""; ?>

  3. 3

    Presenta un formulario de inicio de sesión HTML para el usuario. Configura la acción en el archivo PHP con el formulario utilizando "PHP_SELF" y establece el método de formulario a "Post". Por ejemplo, escribe en el editor:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Login</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <form action="<?php echo htmlentities($_SERVER[PHP_SELF]); ?>" method="post"> <fieldset><legend>Login</legend> <strong>Username: </strong><input type="text" width="30" name="username" value="<?php echo $username; ?>" /><br/> <strong>Password: </strong><input type="password" width="30" name="password" value="<?php echo $password; ?>"/> <input type="submit" name="submit" value="Login" /> </fieldset> </form>

  4. 4

    Comprueba que las variables nombre de usuario y la contraseña estén definidas o sal y espera a que el usuario rellene el formulario. Por ejemplo, escribe en el editor:

    if ($username == "" || $password == "") return;

    Validar la sesión del usuario con MySQL

  1. 1

    Abre la base de datos MySQL y selecciona la tabla con los datos del nombre de usuario y contraseña. Por ejemplo, escribe en el editor:

    $dbc = @mysql_connect("localhost", "username", "password") || die("¡No se puede abrir la base de datos de seguridad!"); $db = @mysql_select_db("users") || die("¡No se puede abrir la tabla seguridad!");

  2. 2

    Crea una consulta para devolver el registro de base de datos que coincida con el nombre de usuario y contraseña proporcionada. Utiliza la función "md5" para cifrar la contraseña de manera que tenga el mismo formato con el que está almacenada en la base de datos. Escapa de todos los campos de entrada del usuario con "mysql_real_escape_string" para evitar las inyecciones SQL. Por ejemplo, escribe en el editor:

    $query = sprintf('SELECT * FROM users WHERE username="%s AND password="%s', mysql_real_escape_string($username), mysql_real_escape_string(md5($password)));

  3. 3

    Ejecuta la consulta en la base de datos y evalúa el resultado. Deniega el inicio de sesión si la consulta falla o si no se han devuelto registros. Por ejemplo, escribe en el editor:

    $result = mysql_query($query); if (!$result || mysql_num_rows($result) != 1) { echo '<p class="error">Invalid login!</p>'; return; }

  4. 4

    Redirige al usuario a la URL almacenada en la variable de la sesión "nexturl" si la conexión se ha realizado con éxito. Por ejemplo, escribe en el editor:

    header("Location: " . $_SESSION['nexturl']); ?> </body> </html>

Consejos y advertencias

  • Por razones de seguridad, no debes almacenar las contraseñas en texto plano en la base de datos. Usa una función tal como "md5" para cifrar una contraseña y almacenar el valor codificado en la base de datos. No podrás descifrar una contraseña encriptada con "md5".

No dejes de ver

Filtrar por:
  • Mostrar todos
  • Artículos
  • Galerías de fotos
  • Videos
Ordenar:
  • Más relevante
  • Más popular
  • Más reciente

No se encuentran artículos disponibles

No se encuentran slideshows disponibles

No se encuentran videos disponibles