Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in /srv/vhost/pazosdereis.org/home/html/cfg/config.php on line 76
db = NewADOConnection('mysqli'); $this->db->Connect( $config['MYSQL']['HOST'], $config['MYSQL']['USER'], $config['MYSQL']['PASS'], $config['MYSQL']['NOMB'] ); $this->db->debug = $debug; } } } ?> '-', '/' => '-')); // Generamos el pass $pass = crypt($passLiteral, $semilla); //'$2y$10$' . $semilla return array( "semilla" => $semilla, "password" => $pass, "literal" => $passLiteral ); } /** * Login::__construct() * * Constructor de la clase Login * * @param mixed $usr * @param mixed $pass * @return void */ function __construct($datos){ $conex = new Conexion(); $db = $conex->db; $this->db = $db; $this->usuario = isset($datos['login_usuario']) ? $datos['login_usuario'] : null;//$usr; $this->password = isset($datos['login_passwd']) ? $datos['login_passwd'] : null;//$usr; } /** * Login::compruebaUsr() * * Método que comprueba si la combinación de usuario/password existe en la BDD * * @return integer $existe */ private function compruebaUsr(){ global $config; /** * Valores posibles: * -2 : El usuario ESTÁ BLOQUEADO * -1 : El usuario NO EXISTE * 0 : El usuario/password NO EXISTE * 1 : El usuario/password EXISTE */ $existe = 0; $tabUSR = "usuario"; //Consulta para recoger la semilla del usuario $sql = " SELECT * FROM " . $tabUSR . " WHERE usr_usuario LIKE '" . $this->usuario . "'"; try{ $rs = $this->db->Execute($sql); $this->usrID = $rs->Fields("usr_id"); //Comprobamos si la contraseña coincide con la del usuario if ($rs && !$rs->EOF){ //Comprobamos si el usuario está bloqueado por varios intentos de conexion if (!$this->compruebaFBruta()){ $sql = " SELECT * FROM " . $tabUSR . " WHERE usr_usuario LIKE '" . $this->usuario . "' AND usr_pass LIKE '" . crypt($this->password, $rs->Fields('usr_semilla')) . "'"; $rs = $this->db->execute($sql); if ($rs && !$rs->EOF){ $this->datosUSR = $rs->fields; $ret = self::LOGIN_OK; }else{ $ret = self::LOGIN_NOEXISTE; } //Registramos un nuevo intento de login $this->nuevoIntento($ret == self::LOGIN_OK); return $ret; }else{ return self::LOGIN_BLOQUEADO; } }else{ return self::LOGIN_USERMAL; } }catch(Exception $ex){ return self::LOGIN_USERMAL; } } /** * Login::acceder() * * Método encargado de leer la información del usuario en caso de que exista * * @param mixed $usuario * @param mixed $pass * @return void */ public function acceder(){ global $config; if (!is_null($this->usuario) && !is_null($this->password)){ $res = $this->compruebaUsr(); switch($res){ case self::LOGIN_OK: // Protección XSS ya que podríamos imprimir este valor (solo permite car NUMERICOS) $_SESSION[$config['SESS']['PREF'] . 'user_id'] = preg_replace("/[^0-9]+/", "", $this->datosUSR['usr_id']); $_SESSION[$config['SESS']['PREF'] . 'emp_id'] = preg_replace("/[^0-9]+/", "", $this->datosUSR['usr_emp_id']); // Protección XSS ya que podríamos imprimir este valor (solo permite a-z A-Z 0-9 _ -) $_SESSION[$config['SESS']['PREF'] . 'timezone'] = $this->datosUSR['usr_tz']; /*foreach($config['IDIOMAS'] as $idi => $idioma){ if ($idioma['COD'] == $this->datosUSR['usr_idi_id']){ $_SESSION[$config['SESS']['PREF'] . 'idioma'] = $idi; } } */ $_SESSION[$config['SESS']['PREF'] . 'usuario'] = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $this->datosUSR['usr_usuario']); $_SESSION[$config['SESS']['PREF'] . 'lgnstr'] = hash('sha512', $this->datosUSR['usr_pass'] . $_SERVER['HTTP_USER_AGENT']); $_SESSION[$config['SESS']['PREF'] . 'grupos'] = $this->datosUSR['usr_grupos']; return $res;//self::myKeeper($res); break; case self::LOGIN_USERMAL: case self::LOGIN_NOEXISTE: return $res; break; case self::LOGIN_BLOQUEADO: return self::LOGIN_BLOQUEADO; break; } }else{ //Si el usuario ha cerrado la sesión if ($config['SECCION'] == $config['URL_SALIR']){ self::salir(); } $resLogin = self::check(); //self::myKeeper($resLogin); //Devolvemos el resultado del Login return $resLogin; } } /*private static function myKeeper($resLogin){ global $config; //Si la seccion es "login" y la sesion está iniciada, recargamos la home if ($resLogin == self::LOGIN_OK && $config['SECCION'] == $config['URL_LOGIN']){ header("Location: " . $config['URL']); exit(); } }*/ /** * Login::check() * * Revisa si la sesión está iniciada * * @return */ public static function check() { global $config; $conex = new Conexion(); $db = $conex->db; // Revisa si todas las variables de sesión están configuradas. if ( isset( $_SESSION[$config['SESS']['PREF'] . 'user_id'], $_SESSION[$config['SESS']['PREF'] . 'usuario'], $_SESSION[$config['SESS']['PREF'] . 'lgnstr'], $_SESSION[$config['SESS']['PREF'] . 'grupos'] ) ) { $user_id = $_SESSION[$config['SESS']['PREF'] . 'user_id']; $lgn_string = $_SESSION[$config['SESS']['PREF'] . 'lgnstr']; $usuario = $_SESSION[$config['SESS']['PREF'] . 'usuario']; $grupos = $_SESSION[$config['SESS']['PREF'] . 'grupos']; $usr_navega = $_SERVER['HTTP_USER_AGENT']; $tab = "usuario"; $sql = "SELECT usr_pass AS pass FROM " . $tab . " WHERE usr_id = " . $user_id . " LIMIT 1"; $rs = $db->execute($sql); // Si el usuario existe, obtiene las variables del resultado. if ($rs && $rs->RecordCount() == 1){ $lgn_check = hash('sha512', $rs->Fields('pass') . $usr_navega); if ($lgn_check == $lgn_string) { $sql = "SELECT * FROM " . $tab . " WHERE usr_id = " . $user_id . " LIMIT 1"; $rs = $db->execute($sql); if ($rs->RecordCount() == 1) { $config['SESS']['USER']['NOMBRE'] = $rs->Fields('usr_nombre'); $config['SESS']['USER']['EMAIL'] = $rs->Fields('usr_email'); } return self::LOGIN_OK; } else { return null; } } else { return null; } }else{ return null; } } public function getInfo(){ } /** * Login::salir() * * Cierra la sesión de usuario * * @return void */ public static function salir(){ global $config; unset( $_SESSION[$config['SESS']['PREF'] . 'user_id'], $_SESSION[$config['SESS']['PREF'] . 'usuario'], $_SESSION[$config['SESS']['PREF'] . 'lgnstr'], $_SESSION[$config['SESS']['PREF'] . 'timezone'], $_SESSION[$config['SESS']['PREF'] . 'idioma'], $_SESSION[$config['SESS']['PREF'] . 'grupos'], $_SESSION[$config['SESS']['PREF'] . 'filtros']); } /** * Login::nuevoIntento() * * Insertamos un nuevo intento de conexion en la BDD * * @return void */ private function nuevoIntento($estado){ global $config; $tab = "attempts"; $sql = " INSERT INTO " . $tab . " ( lgn_usr_id, lgn_estado, lgn_ip, lgn_timestamp ) VALUES ( " . $this->db->qstr($this->usrID) . ", " . $this->db->qstr($estado) . ", " . $this->db->qstr(self::dameIPReal()). ", CURRENT_TIMESTAMP )"; $this->db->execute($sql); } /** * Login::compruebaFBruta() * * Método encargado de comprobar si un usuario ha realizado más de $cfgKeeper['SESS']['INTENTOS'] de inicio de sesion * * @return */ private function compruebaFBruta() { global $config; //Comprobamos si hay más intentos de los Max permitidos, contando intentos válidos los realizados hace 2 horas $tab = "attempts"; $sql = " SELECT lgn_timestamp FROM " . $tab . " WHERE lgn_usr_id = " . $this->usrID . " AND lgn_timestamp > DATE_ADD(CURRENT_TIMESTAMP, INTERVAL -" . $config['SESS']['ESPERA'] . ") AND lgn_estado = FALSE"; $rs = $this->db->execute($sql); if ($rs && $rs->RecordCount() >= $config['SESS']['INTENTOS']){ return true; }else{ return false; } } /** * Login::dameIPReal() * * Método que devuelve la IP Real del usuario * * @return */ static function dameIPReal(){ if( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '' ){ $client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ? $_SERVER['REMOTE_ADDR'] : ( ( !empty($_ENV['REMOTE_ADDR']) ) ? $_ENV['REMOTE_ADDR'] : "unknown" ); // los proxys van añadiendo al final de esta cabecera // las direcciones ip que van "ocultando". Para localizar la ip real // del usuario se comienza a mirar por el principio hasta encontrar // una dirección ip que no sea del rango privado. En caso de no // encontrarse ninguna se toma como valor el REMOTE_ADDR $entries = preg_split('/[, ]/', $_SERVER['HTTP_X_FORWARDED_FOR']); reset($entries); while (list(, $entry) = each($entries)){ $entry = trim($entry); if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) ){ // http://www.faqs.org/rfcs/rfc1918.html $private_ip = array( '/^0\./', '/^127\.0\.0\.1/', '/^192\.168\..*/', '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/', '/^10\..*/'); $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]); if ($client_ip != $found_ip){ $client_ip = $found_ip; break; } } } } else { $client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ? $_SERVER['REMOTE_ADDR'] : ( ( !empty($_ENV['REMOTE_ADDR']) ) ? $_ENV['REMOTE_ADDR'] : "unknown" ); } return $client_ip; } /** * Login::nuevoPass() * * Crea una nueva contraseña aleatoria * * @return void */ public static function nuevoPass(){ } } } ?>
Fatal error: Class 'Login' not found in /srv/vhost/pazosdereis.org/home/html/cfg/config.php on line 95