Foro de elhacker.net

Programación => 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
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. //begin AuthLogger.php -- Library
  3.  
  4.  
  5. class AuthLogger {
  6.  
  7. /*-----------------------------------------------------------------------*/
  8. /**
  9. * Class Settings
  10. * @logFile = Name of the log file
  11. * @logPath = The path where the logFile will
  12. *  be saves. By default it saves it
  13. *  in the CI logs folder.
  14. */
  15. private $logPath;
  16. private $logFile = 'auth_logs.xml';
  17.    private $user, $pass, $ip, $useragent;
  18.  
  19. /*-----------------------------------------------------------------------*/
  20. /**
  21. * The constructor of the Class.
  22. * It needs and array with the parameters.
  23. */
  24. function __construct($params)
  25.    {
  26.     //The logPath it can be changed if the lib
  27.     // won't be used with CI
  28. $this->logPath = APPPATH.'logs/';
  29.        $this->user = $params['user'];
  30.        $this->pass = $params['pass'];
  31.        $this->ip = $params['ip'];
  32.        $this->useragent = $params['useragent'];
  33.  
  34.        $this->addLogs($this->user, $this->pass, $this->ip, $this->useragent);
  35.  
  36.  
  37.    }
  38.  
  39. /*-----------------------------------------------------------------------*/
  40. /**
  41. * Creates or Adds the logs to the XML File.
  42. * It's an internal private function.
  43. */
  44.    private function addLogs($user, $pass = 'Good Auth', $ip, $useragent)
  45.    {
  46.  
  47. if (!file_exists($this->logPath.$this->logFile)) {
  48. $xml = new SimpleXMLElement("<logdata></logdata>");
  49. } else {
  50. $xml = simplexml_load_file($this->logPath.$this->logFile);
  51. }
  52.  
  53.        $authLog = $xml->addChild('auth_log');
  54.        $authLog->addChild('user', $user);
  55.        $authLog->addChild('password', $pass);
  56.        $authLog->addChild('ip', $ip);
  57.        $authLog->addChild('user_agent', $useragent);
  58.        $authLog->addChild('date', date("d F Y - G:i:s"));
  59.        $xml->asXML($this->logPath.$this->logFile);
  60.  
  61.    }
  62. /*-----------------------------------------------------------------------*/
  63.  
  64. }
  65.  
  66. //end AuthLogger.php -- Library
  67. ?>
  68.  

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
  1. $params = array (
  2.                        'user'      => $user,
  3.                        'pass'          => $pass',
  4.                        'ip'            => $this->session->userdata('ip_address'),
  5.                        'useragent' => $this->session->userdata('user_agent')
  6.                    );
  7.  

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
  1.       $this->load->library('AuthLogger', $params);
  2.  

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

Código
  1. <?xml version="1.0"?>
  2. <logdata>
  3. <auth_log>
  4. <user>mad</user>
  5. <password>mad</password>
  6. <ip>127.0.0.1</ip>
  7. <user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
  8. <date>08 July 2011 - 22:38:51</date>
  9. </auth_log>
  10. <auth_log>
  11. <user>mad</user>
  12. <password>mad</password>
  13. <ip>0.0.0.0</ip>
  14. <user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
  15. <date>08 July 2011 - 22</date>
  16. </auth_log>
  17. <auth_log>
  18. <user>mad</user>
  19. <password>mad</password>
  20. <ip>127.0.0.1</ip>
  21. <user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
  22. <date>08 July 2011 - 22:38:51</date>
  23. </auth_log>
  24. </logdata>
  25.  

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
  1. $user = $this->input->post('user');
  2. $pass = $this->input->post('password');
  3.  
  4. if ($this->Users_model->checkUser($user, $pass)) {
  5.    //Good User Credentials
  6.  
  7.    /* AuthLog Parameters and Lib */
  8.    $params = array (
  9.        'user'      => $user,
  10.        'pass'      => 'Good Authentification',
  11.        'ip'        => $this->session->userdata('ip_address'),
  12.        'useragent' => $this->session->userdata('user_agent')
  13.    );
  14.    $this->load->library('AuthLogger', $params);
  15.    /* AuthLog Parameters and Lib */
  16.  
  17. } else {
  18.    //BAD User Credentials
  19.  
  20.    /* AuthLog Parameters and Lib */
  21.    $params = array (
  22.        'user'  => $user,
  23.        'pass'  => $pass,
  24.        'ip'    => $this->session->userdata('ip_address'),
  25.        'useragent' => $this->session->userdata('user_agent')
  26.    );
  27.    $this->load->library('AuthLogger', $params);
  28.    /* AuthLog Parameters and Lib */
  29.  
  30. }
  31.  

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
  1.    require_once('authLogger.class.php');
  2.    $authLogger = new AuthLogger($params);
  3.  

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.