Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

domingo, 27 de julio de 2008

Control básico de acceso en PHP

Un amigo me preguntaba ayer cómo incluir un control de validación en un sitio web de una forma muy sencilla. Deseaba restringir el acceso a determinados usuarios a la descarga de un determinado recurso. Aunque evidentemente no se trata de la mejor forma de proteger una determinada información, ya que el servidor soportaba PHP, y sin necesidad de montar una base de datos, una posible solución podía ser usar la tupla de variables de servidor $PHP_AUTH_USER, $PHP_AUTH_PW para controlar el acceso, a través de un array de parejas nombre_de_usuario/contraseña. La implementación es muy sencilla, y aunque como ya apuntaba no es la mejor a la hora de proteger nuestra información, puede servirnos para salir del apuro y proteger una información determinada sin necesidad de tocar, por ejemplo, los archivos .htaccess y .htpasswd, por ejemplo, o de montar una infraestructura mayor con el mismo fin.


A continuación dejo el código en PHP. Bastaría, por ejemplo, con usarlo como un archivo index.php, incluirlo en la ruta que deseemos proteger, e incluir al final del código (tras el tag de cierre de PHP, ?>) el código HTML que deseemos mostrar en caso de que el usuario de autentique correctamente (por ejemplo, una página con el enlace al recurso que deseemos mostrar).


[php]
<?php

// Introducir aquí los usuarios que deseemos que tengan acceso al recurso
$lista[0]['usuario']='pepe';
$lista[0]['password']='cables';

$lista[1]['usuario']='juanito';
$lista[1]['password']='piscinas';

//...

function autenticar($u,$p)
{
global $lista;

foreach ($lista as $datos)
{
if ( ($datos['usuario'] == $u) AND ($datos['password'] == $p) )
{
return TRUE;
}
}
return FALSE;

}
// $PHP_AUTH_USER, $PHP_AUTH_PW
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];

if ( !autenticar($user,$pass) )
{
header('WWW-Authenticate: Basic realm="Acceso restringido."');
header('HTTP/1.0 401 Unauthorized');
echo 'Autentifación No Válida';
exit;
}


?>
[/php]

No hay comentarios:

Publicar un comentario