elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter  (Leído 3,217 veces)
madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter
« 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.


En línea



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

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


Desconectado Desconectado

Mensajes: 395



Ver Perfil WWW
Re: Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter
« Respuesta #1 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.


En línea

"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 ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Auth Logger - Librería simple para registrar intentos de logueo en CodeIgniter
« Respuesta #2 en: 11 Julio 2011, 20:48 pm »

Yo preferiria XML, así si necesito parsear los datos seria mucho mas fácil.
En línea

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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
IDE para CodeIgniter?
PHP
[u]nsigned 0 3,776 Último mensaje 16 Diciembre 2010, 21:55 pm
por [u]nsigned
IDE para CodeIgniter?
Desarrollo Web
[u]nsigned 1 5,122 Último mensaje 18 Abril 2011, 17:43 pm
por Nakp
Registrar una librería o dll
Scripting
Esgrimidor 2 2,023 Último mensaje 13 Julio 2012, 01:32 am
por Esgrimidor
Libreria DOMPDF con Codeigniter
PHP
01munrra 3 4,341 Último mensaje 24 Febrero 2013, 23:37 pm
por 01munrra
Dudas sobre el API de twitter para php (user auth, app auth)
PHP
erest0r 2 1,838 Último mensaje 18 Junio 2015, 23:01 pm
por erest0r
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines