/** * @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; }
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; } }
/** * @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; } }