Código
//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) { $xml = new SimpleXMLElement("<logdata></logdata>"); } else { } $authLog = $xml->addChild('auth_log'); $authLog->addChild('user', $user); $authLog->addChild('password', $pass); $authLog->addChild('ip', $ip); $authLog->addChild('user_agent', $useragent); $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
'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 */ '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 */ '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.