Programador PHP freelance

Escribir un container para autentificación de usuarios contra un array de passwords en claro con PEAR::Auth

Normalmente utilizo PEAR::Auth para autentificar los usuarios contra una tabla de una base de datos. Los passwords en PEAR::Auth se espera que esten encriptados con MD5 siguiendo lo que es una política normal de seguridad.

En uno de mis proyectos el cliente requería que las contraseñas se guardaran en plano dentro de un array en un fichero php, lo que les posibilitaba resetear el password de una forma rápida ya que el usuario final solía llamarles pidiendoles que lo hicieran ya que había olvidado la contraseña 😉

El sistema en cuestión era una intranet monousuario de una pequeña web.

Para cubrir el requisito he tenido que crear un contenedor en PEAR::Auth que me permite gobernar la forma en que el usuario es validado.

Os dejo el código por si a alguien le puede interesar:

require_once 'Auth/Container.php';

class PlainPasswordArrayContainer extends Auth_Container
{

var $passwords;

/**
  * Constructor
  */

 function PlainPasswordArrayContainer($passwords)
 {
 	// Init Here
 	$this->passwords = $passwords;
 }

function fetchData($username, $password)
 {
        // Check If valid

 	if($this->passwords[$username]==$password) {
 		return true;
 	}

 	return false;
}

}

Aquí teneis la forma de invocarlo:

require_once 'classes/PlainPasswordArrayContainer.class.php';

require_once 'Auth.php'; //PEAR package

$authContainer = new PlainPasswordArrayContainer($passwordArray);
$a = new Auth($authContainer, NULL, "login");

$a->setSessionname(SESSIO);
$a->setIdle(3000); // in seconds
$a->start();

if ($a->getAuth()) {

// User has been validated

}

Aquí teneis el formato del fichero con los passwords en plano para un sistema monousuario donde el usuario admin tiene el password ‘Hsy8Jsh23Ks’:

$passwordArray = array('admin' => 'Hsy8Jsh23Ks');

Por supuesto, sobreescribiendo la clase podeis validar contra lo que os dé la gana 😉