Autorización simple en PHP+MySQL+JavaScript+AJAX

El propósito principal de este guión es educativo. El script muestra cómo puede resolver el problema del acceso autorizado a algunos datos. Además de la autorización, el ejemplo también implementa los formularios para ver, agregar, editar y eliminar usuarios. También se observa una seguridad mínima: los datos se filtran, los tipos se verifican, las contraseñas no se almacenan y no se transmiten en claro. Sé que la fuerza bruta MD5 es muy rápida, así que para trabajar, use sus propios algoritmos más confiables 😉

La base de datos requiere solo una tabla:

CREATE TABLE `users` (
`ID_USERS` int(11) NOT NULL,
`US_NAME` varchar(30) NOT NULL,
`US_FIO` varchar(50) NOT NULL,
`US_PASSMD5` varchar(32) NOT NULL,
`US_SESSION` varchar(32) DEFAULT NULL,
`US_INS` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`US_DEL` timestamp NULL DEFAULT NULL
) ;

ALTER TABLE `users`
ADD PRIMARY KEY (`ID_USERS`),
ADD UNIQUE KEY `US_NAME` (`US_NAME`);

ALTER TABLE `users`
MODIFY `ID_USERS` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;COMMIT;

La limitación más importante que impone esta estructura es una única sesión activa, ya que no existe otra tabla para almacenarlas. Esto significa que una vez que se realiza una entrada en otro navegador, la sesión anterior deja de ser válida, porque almacenamos solo la última (US_SESSION).

El primer usuario debe agregarse directamente desde la base de datos, ya que el editor funciona solo para el usuario autorizado (contraseña: admin):

INSERT INTO `users` (`ID_USERS`, `US_NAME`, `US_FIO`, `US_PASSMD5`) VALUES
(1, 'admin', 'ADMIN', '58d1921b404b7d6e8f5059fb6e720645');

Todos los scripts php se dividen en los siguientes archivos:

  • db.php – Conexión de base de datos
  • function.php – Funciones de apoyo que pueden ser necesarias en diferentes lugares.
  • login.php – Verificación para la autorización, y si el usuario no está autorizado, interrupción del acceso a cualquier información y visualización de los campos de autorización.
  • login_.php – Verificación de login, contraseña y autorización.

La interfaz se implementa mediante los siguientes archivos:

  • users.php – Una lista de usuarios.
  • user.php – Interfaz para la visualización y edición de datos de usuario.
  • user_.php – Procesando la edición del usuario.

Archivos para formar una página:

  • header.php – Conectamos css, biblioteca jquery, formamos el título y el menú principal
  • footer.php – Página de pie de página.
  • main.css – Hazlo a tu gusto.

Importante:

Al principio de la mayoría de los guiones hay

include_once 'db.php';

Por lo tanto, no solo la conexión de la base de datos, sino también la verificación de la autorización del usuario y la transición a la autorización si no está autorizado. Este esquema impide el acceso a los datos de quienes no están autorizados (por supuesto, esto no es adecuado para quienes tienen secciones públicas disponibles para todos).
Además de los java-scripts que conectan header.php, cada página implementa adicionalmente los scripts necesarios para ello.
Todo el código php al que se accede a través de POST contenido en los archivos * _.php para la visualización de particiones de datos semánticos y modifica el código.
Un ejemplo de JavaScript que almacena cierta información en la base de datos:

function SaveFIO() {
  $.ajax({
    type: "POST",
    data: ({action: "upd", ID_USERS: ID_USERS, US_FIO: $("#US_FIO").text() }),
    url: "user_.php",
    dataType: "html",
    success: function (data) {
      $("#FIOButton").hide();
    }
  })
}

De igual forma se realizan todas las funciones de envío de datos vía POST. En cualquier secuencia de comandos de procesamiento de solicitudes POST, también es natural verificar la autorización, ya que está integrada en el propio módulo de conexión DB (db.php) y es difícil olvidarla casualmente.

Toda la magia de la autorización tiene lugar en los módulos login.php y login_.php. El módulo login.php, al ser llamado uno de los primeros, simplemente no permitirá la ejecución de los siguientes módulos si no puede confirmar la autorización y registrar la identificación del usuario en $ID_USERS. Para ello, utiliza $_COOKIE[‘US_SESSION’] è $_COOKIE[‘ID_USERS’], que se buscan en la base de datos y si encuentra $ID_USERS, obtiene el valor y continúa la ejecución de los módulos restantes.
Si el módulo de verificación considera que el usuario no está autorizado, genera un formulario de autorización y finaliza la ejecución de la consulta. Además, este método, a diferencia de lanzar la página de autorización, es que después de la autorización, la página simplemente se actualiza y el usuario se queda donde estaba, continuando con su trabajo.
La autorización realiza tal pieza de código:

if (isset($_POST[‘US_NAME’])and isset($_POST[‘US_PASSMD5’])) {
$stmt = $pdo->prepare(«select ID_USERS from USERS where US_NAME=? and US_DEL is null and US_PASSMD5=?»);
$stmt->execute(array($_POST[‘US_NAME’], $_POST[‘US_PASSMD5’]));
$result = $stmt->fetch();
if ($result) {
// valid login and pass
$stmt = $pdo->prepare(«update USERS set US_SESSION=? where ID_USERS=?»);
$US_SESSION = md5(date(‘dd-mm-yyyy’).rand().$result[‘ID_USERS’].$_POST[‘US_NAME’].$_POST[‘US_PASSMD5’]);
$stmt->execute(array($US_SESSION, $result[‘ID_USERS’] ));

setcookie(‘US_SESSION’, $US_SESSION);
setcookie(‘ID_USERS’, $result[‘ID_USERS’]);
} else {
setcookie(‘US_SESSION’, »);
}
}

Como es fácil de entender en caso de una combinación exitosa de nombre de usuario y contraseña en la base de datos, se genera un hash de sesión (basado en algunos datos y componentes aleatorios), que se ingresa inmediatamente en la base de datos, borrando la sesión anterior (si fue allí), y guardando el valor US_SESSION en el navegador de cookies del Usuario.

Descargue este ejemplo (no olvide crear DB «DOC» y admin de usuario) – php_auth_sample.rar (5kb)

Deja un comentario

Tu dirección de correo electrónico no será publicada.