
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