
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'; } ?>
Comentarios recientes