Skip to main content
PHP

Validar usuarios con cabeceras HTTP y archivos de texto

Por 12 diciembre, 2016Sin comentarios
Como hacer validación de seguridad con un simple código PHP

En un sitio web siempre ha sido importante la seguridad contra hackeos y a veces lo descuidamos. Sobre todo si tenemos contenido sensible, bases de datos con datos de usuarios, archivos importantes, etc

… Hoy en día podemos protegerlos de varias formas. Ocultar archivos, proteger directorios con contraseña, bloquear IPs, encriptación…
En este post hablaré de proteger una página con usuario y contraseña. En servidores Apache podriamos hacerlo simplemente con el archivo .htaccess y .htpasswd. Pero si no sabemos utilizarlos o nuestro servidor no es compatible, podemos hacerlo con un sencillo código:

<?php

 //Comprobamos usuario y contraseña
 if (($_SERVER[´PHP_AUTH_USER´]!="Jairo") || ($_SERVER[´PHP_AUTH_PW´] !="qwerty"))
 {
   header('WWW-Authenticate: Basic realm="Acceso restringido"');
   header('HTTP/1.0 401 Unauthorized');
   echo 'Autorización requerida.';
   //En caso de que le de a cancelar
   exit;
 } 
?>

Con la función header() enviamos encabezados HTTP, como por ejemplo de «Autorización requerida». Conseguimos que aparezca una ventana emergente solicitando usuario y contraseña antes de cargar la página web. Para que funcionen el script de cabeceras HTTP tiene que ir lo primero en el código de la página, antes que el html o funciones como include y required.
Para el usuario y contraseña utilizamos las variables globales PHP_AUTH_USER y PHP_AUTH_PW, dentro de la variable $_SERVER. Compatible con PHP 4.1.0 o superior.
Pero en vez de poner el usuario y contraseña en el código, vamos a complicarlo un poco más y ponerlo en un archivo externo. Podriamos hacerlo también con una base de datos o el .htpasswd. En este caso utilizaremos un archivo de texto. Por ejemplo, «password.txt»:

Archivo "password.txt":
    
    Jairo:qwerty
    Darkvather:yoSoytuPadre
    Fibonacci:011235813

<? php

 // Entendemos que el usuario no está autentificado aún...
 $autorizado = false;

 if (isset( $PHP_AUTH_USER ) && isset($PHP_AUTH_PW)) {   

    // Abrir, leer el archivo y guardarlo en la variable $contenido   
    $archivo = '/usuarios/password.txt';
    $fp = fopen( $archivo, 'r' );
    $contenido = fread( $fp, filesize( $archivo ) );
    fclose( $fp );

    // Colocamos cada línea del archivo en un arreglo.   
    $lineas = explode ( "\n", $contenido );

    // Partir cada linea en usuario y contraseña
    // comparamos los valores con $PHP_AUTH_USER y $PHP_AUTH_PW.   
    foreach ( $lineas as $linea ) {   

        list( $usuario, $contrasena ) = explode( ':', $linea );

        if ( ( $usuario == "$_SERVER[´PHP_AUTH_USER´]" ) && ( $contrasena == "$_SERVER[´PHP_AUTH_PW´]" ) ) {   
            // Si coincide rompemos la función y detenemos la busqueda   
            $auth = true;
            break;   
        }      
    }  
 }   
 if ( ! $autorizado )
 {   
    header( 'WWW-Authenticate: Basic realm="Acesso restringido"' );
    header( 'HTTP/1.0 401 Unauthorized' );
    echo 'Autorización requerida.';
    exit;   
 }
 else
 {   
    echo 'Ud. está autorizado';  
 }

?>
Jairo Calero

Jairo Calero

Desarrollador web frontend y backend, especialista en webs app desarrolladas en PHP y Javascript. Experto en HTML, CSS3, PHP y Javascript con frameworks y librerías como jQuery, Angular y Bootstrap. Gestor de herramientas SEO como Google Analytics, Search Console, SEMrush o Hotjar. Email marketing y Big data.

Deja tu respuesta