Пример #1
0
 /**
  * @return bool
  */
 private function check()
 {
     $this->_sql = "SELECT * FROM users WHERE login = '******';";
     $query = parent::$_db_connect->query($this->_sql);
     if (!$query) {
         parent::errorResult("Se ha producido algún error vuelva a intentarlo más tarde", true);
         return false;
     } elseif ($query->num_rows == 0) {
         self::$access_error++;
         parent::errorResult("¡El usuario introducido no existe!");
         return false;
     } else {
         if ($row = $query->fetch_assoc()) {
             if (password_verify($this->pass, $row['pass'])) {
                 if (self::$access_error > 3 && isset($_POST['captcha']) && $_POST['captcha'] == $_COOKIE['key']) {
                     $_SESSION['user'] = array();
                     $_SESSION['user']['id'] = $row['id'];
                     $_SESSION['user']['login'] = $row['login'];
                     $_SESSION['user']['pass'] = $row['pass'];
                     $_SESSION['user']['name'] = $row['nombre'];
                     $_SESSION['user']['firma'] = $row['firma'];
                     $_SESSION['user']['email'] = $row['email'];
                     $_SESSION['user']['avatar'] = $row['avatar'];
                     $_SESSION['user']['tipo'] = $row['tipo'];
                     $dateTime = new DateTime();
                     $_SESSION['user']['time'] = $dateTime->format('d-m-Y H:i:s');
                 } elseif (self::$access_error <= 3) {
                     $_SESSION['user'] = array();
                     $_SESSION['user']['id'] = $row['id'];
                     $_SESSION['user']['login'] = $row['login'];
                     $_SESSION['user']['pass'] = $row['pass'];
                     $_SESSION['user']['name'] = $row['nombre'];
                     $_SESSION['user']['firma'] = $row['firma'];
                     $_SESSION['user']['email'] = $row['email'];
                     $_SESSION['user']['avatar'] = $row['avatar'];
                     $_SESSION['user']['tipo'] = $row['tipo'];
                     $dateTime = new DateTime();
                     $_SESSION['user']['time'] = $dateTime->format('d-m-Y H:i:s');
                 } else {
                     $this->captchaFail = "El 'Captcha' no es válido";
                     parent::closeConnect();
                     return false;
                 }
             } else {
                 self::$access_error++;
                 parent::errorResult("La contraseña no es válida.");
                 return false;
             }
         } else {
             parent::errorResult("Se ha producido algún error vuelva a intentarlo más tarde", true);
             return false;
         }
     }
     parent::closeConnect();
     return true;
 }
Пример #2
0
 private function noIssetNickName()
 {
     $this->_sql = "SELECT id FROM users WHERE login = '******';";
     $query = parent::$_db_connect->query($this->_sql);
     if ($query === false) {
         parent::errorResult("No se ha podido comprobar la existencia del Login, vuelva a intentarlo más tarde.", true);
         return false;
     }
     if ($query->num_rows == 0) {
         return true;
     } else {
         return false;
     }
 }
Пример #3
0
 /**
  * @return bool
  *
  * Actualiza los campos tan solo relacionados con la contraseña y realiza sus respectivas comprobaciones.
  * 1.- Comprueba que los campos del formulario relacionados con la contraseña no esten vacios.
  * 2.- Comprueba que la nueva contraseña cumpla los requisitos que debe tener la contraseña (min 8 car, 1 mayu, 1 min y 1 num).
  * 3.- Comprueba que la contraseña antigua sea igual que la que el usuario ha introducido en el campo de 'Contraseña antigua'.
  * 4.- Comprueba que la nueva contraseña y su repetición sean iguales.
  *
  */
 private function passUpdate()
 {
     if (empty($this->old) && empty($this->new) && empty($this->renew)) {
         return false;
     } else {
         if (preg_match("/(?=^.{8,}\$)((?=.*\\d)|(?=.*\\W+))(?=.*[A-Z])(?=.*[a-z]).*\$/", $this->new)) {
             if (password_verify($this->old, $_SESSION['user']['pass'])) {
                 if ($this->new == $this->renew) {
                     /**
                      * Este código evaluará el servidor para determinar el coste permitido.
                      * Se establecerá el mayor coste posible sin disminuir demasiando la velocidad
                      * del servidor. 8-10 es una buena referencia, y más es bueno si los servidores
                      * son suficientemente rápidos. El código que sigue tiene como objetivo un tramo de
                      * ≤ 50 milisegundos, que es una buena referencia para sistemas con registros interactivos.
                      */
                     $timeTarget = 0.05;
                     // 50 milisegundos
                     $coste = 8;
                     do {
                         $coste++;
                         $inicio = microtime(true);
                         $this->new = password_hash($this->new, PASSWORD_BCRYPT, ["cost" => $coste]);
                         $fin = microtime(true);
                     } while ($fin - $inicio < $timeTarget);
                 } else {
                     $this->newFail = "Las nuevas contraseñas no coinciden";
                     return false;
                 }
             } else {
                 $this->oldFail = "La contraseña introducida no coincide con la anterior";
                 return false;
             }
         } else {
             $this->newFail = "La nueva contraseña no cumple los requisitos";
             return false;
         }
         // Establece la conexión a la BD.
         parent::connect();
         $this->_sql = "UPDATE users SET pass = '******' WHERE login = '******'user']['login'] . "';";
         $query = parent::$_db_connect->query($this->_sql);
         if ($query === false) {
             parent::errorResult("¡No se a podido actualizar la contraseña!", true);
             return false;
         }
         return true;
     }
 }