Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: madpitbull_99 en 9 Julio 2011, 20:44 PM

Título: Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter
Publicado por: madpitbull_99 en 9 Julio 2011, 20:44 PM
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.
Título: Re: Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter
Publicado por: bomba1990 en 10 Julio 2011, 02:42 AM
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.
Título: Re: Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter
Publicado por: ~ Yoya ~ en 11 Julio 2011, 20:48 PM
Yo preferiria XML, así si necesito parsear los datos seria mucho mas fácil.