Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter

Iniciado por madpitbull_99, 9 Julio 2011, 20:44 PM

0 Miembros y 1 Visitante están viendo este tema.

madpitbull_99

Se trata de una pequeña librería adaptada para CodeIgniter para registrar los intentos de log-in en nuestro sistema de autenticación. Para guardar los logs se emplea un fichero xml.

Código (php) [Seleccionar]

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//begin AuthLogger.php -- Library


class AuthLogger {

/*-----------------------------------------------------------------------*/
/**
 * Class Settings
 * @logFile = Name of the log file
 * @logPath = The path where the logFile will
 *    be saves. By default it saves it
 *    in the CI logs folder.
 */
private $logPath;
private $logFile 'auth_logs.xml';
    private 
$user$pass$ip$useragent;

/*-----------------------------------------------------------------------*/
/**
 * The constructor of the Class.
 * It needs and array with the parameters.
 */
function __construct($params)
    {
    
//The logPath it can be changed if the lib
    
// won't be used with CI
$this->logPath APPPATH.'logs/';
        
$this->user  $params['user'];
        
$this->pass  $params['pass'];
        
$this->ip  $params['ip'];
        
$this->useragent $params['useragent'];

        
$this->addLogs($this->user$this->pass$this->ip$this->useragent);


    }

/*-----------------------------------------------------------------------*/
/**
 * Creates or Adds the logs to the XML File.
 * It's an internal private function.
 */
    
private function addLogs($user$pass 'Good Auth'$ip$useragent)
    {

if (!file_exists($this->logPath.$this->logFile)) {
$xml = new SimpleXMLElement("<logdata></logdata>");
} else {
$xml simplexml_load_file($this->logPath.$this->logFile);
}
        
        
$authLog $xml->addChild('auth_log');
        
$authLog->addChild('user'$user);
        
$authLog->addChild('password'$pass);
        
$authLog->addChild('ip'$ip);
        
$authLog->addChild('user_agent'$useragent);
        
$authLog->addChild('date'date("d F Y - G:i:s"));
        
$xml->asXML($this->logPath.$this->logFile);

    }
/*-----------------------------------------------------------------------*/

}

//end AuthLogger.php -- Library
?>



En principio fue desarrollada para usarla con CodeIgniter, por lo tanto solamente hay que copiarla en la carpeta application/libraries.
Si se quiere usar sin este framework, hay que incluír la clase a vuestro script.

Modo de Uso

CodeIgniter:
Crear un array con asociativo con los siguientes valores, los índices asociativos del array no se pueden cambiar, al menos que se cambie en la librería:

Código (php) [Seleccionar]

$params = array (
                        'user'      => $user,
                        'pass'          => $pass',
                        'ip'            => $this->session->userdata('ip_address'),
                        'useragent' => $this->session->userdata('user_agent')
                    );


Donde user es el usuario que hemos recibido del formulario, pass es la contraseña e ip y useragent son la IP del posible
atacante y el useragent (que contendrá el navegador y el sistema operativo).


Después cargaremos la librería y en la misma sentencia le pasamos los parámetros:

Código (php) [Seleccionar]

       $this->load->library('AuthLogger', $params);


Y los datos se guardarán en nuestro archivo de logs en un formato xml de la siguiente manera:

Código (xml) [Seleccionar]

<?xml version="1.0"?>
<logdata>
<auth_log>
<user>mad</user>
<password>mad</password>
<ip>127.0.0.1</ip>
<user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
<date>08 July 2011 - 22:38:51</date>
</auth_log>
<auth_log>
<user>mad</user>
<password>mad</password>
<ip>0.0.0.0</ip>
<user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
<date>08 July 2011 - 22</date>
</auth_log>
<auth_log>
<user>mad</user>
<password>mad</password>
<ip>127.0.0.1</ip>
<user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
<date>08 July 2011 - 22:38:51</date>
</auth_log>
</logdata>


Por si este archivo cae en manos ajenas, lo mejor sería no guardar la verdadera password en el log.
Para eso, en nuestra aplicación deberíamos implementarla algo así:

Código (php) [Seleccionar]

$user = $this->input->post('user');
$pass = $this->input->post('password');

if ($this->Users_model->checkUser($user, $pass)) {
    //Good User Credentials

    /* AuthLog Parameters and Lib */
    $params = array (
        'user'      => $user,
        'pass'      => 'Good Authentification',
        'ip'        => $this->session->userdata('ip_address'),
        'useragent' => $this->session->userdata('user_agent')
    );
    $this->load->library('AuthLogger', $params);
    /* AuthLog Parameters and Lib */

} else {
    //BAD User Credentials

    /* AuthLog Parameters and Lib */
    $params = array (
        'user'  => $user,
        'pass'  => $pass,
        'ip'    => $this->session->userdata('ip_address'),
        'useragent' => $this->session->userdata('user_agent')
    );
    $this->load->library('AuthLogger', $params);
    /* AuthLog Parameters and Lib */

}


Simplemente, si los datos del usuario proporcionados son válidos, sobrescribir el parámetro 'pass' por un texto alternativo, también se puede aplicar al
campo del usuario, para más seguridad.

Uso sin framework:

Como ya lo he mencionado, esta librería ha sido creada con el fin de usarla junto con CodeIgniter, pero se puede usar con cualquier proyecto y framework
fácilmente. Se haría de la siguiente manera:

Código (php) [Seleccionar]

    require_once('authLogger.class.php');
    $authLogger = new AuthLogger($params);


Los parámetros son los mismos que en el caso de CodeIgniter. No olvidéis aplicar el mismo o un mecanismo de autenticación parecido al mencionado en el ejemplo de uso
con CodeIgniter, para no incluir los datos verdaderos de acceso en el registro.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

bomba1990

hola esta buena la idea, peor no seria mejor hacerlo en un archivo txt, a mi me gust más.

O tra osa, no conocia esa libreria par amanejar losxml, esta buena tambien.
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

~ Yoya ~

Yo preferiria XML, así si necesito parsear los datos seria mucho mas fácil.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.