【发布时间】:2019-01-28 13:13:45
【问题描述】:
所以我有一个用户可以更改密码的页面,但我希望它更安全,通过询问用户旧密码然后是新密码,我只是不知道如何验证任何人都可以提供帮助请问我?
这是我的实际代码:
<?php
//Inicio de uma session que autentica e valida o login feito em login.php
session_start();
//Redirecionar um Admin ou um SuperAdmin para a devida página com as devidas permissões!
include '../functions/redirect.php';
isAuthenticated();
$user = $_SESSION['users']['username'];
?>
<!DOCTYPE html>
<?php
require '../functions/database.php';
if ( !empty($_POST)) {
// Manter a validação dos erros
$usernameError = null;
$passwordError = null;
$password = $_POST['password'];
// $confirm_password = null;
// $new_password = null;
// Validar os inputs
$valid = true;
if (empty($password)) {
$passwordError = 'Introduza a password!';
$valid = false;
}
// Inserir os dados
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$password = password_hash($password, PASSWORD_BCRYPT);
$sql = "UPDATE users SET password = ? WHERE username = '$user'";
$q = $pdo->prepare($sql);
$q->execute(array($password));
header("Location: index.php");
Database::disconnect();
}
}
?>
【问题讨论】:
-
你到底卡在哪里了?如果您想在更新前检查旧密码,只需通过用户名获取用户并验证密码即可?就像登录一样。
-
您的代码有两个问题。 1. 你没有在任何地方设置
$user变量。 2. 您正在为密码使用参数化准备语句(这很好),但您也应该真的将它用于用户名。用户名可能更危险,因为它没有经过哈希处理。 -
@MagnusEriksson 在页面顶部我定义了
$user$user = $_SESSION['users']['username']; -
您应该向我们展示 all 相关代码(这样我们就知道所有变量包含什么,并且您不会错过定义任何变量或出现拼写错误)。不管怎样,如果你看过我之前的两篇cmets,你应该可以做一些尝试。
-
我已经更新了我的问题