Código
<?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
$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
$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 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
$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
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.










Autor





En línea


