为什么可以';t我查看我的密码,即使答案是正确的


why can't i view my password even answer is correct?

我让用户在忘记密码时检索密码的方法是通过回答他的安全问题,当他答对了密码时,它会回复他的密码。一切正常,除了我开始点击view password按钮。

我知道发布太多代码是不可取的,但我认为你需要查看所有内容才能了解问题所在,因为我也无法弄清楚。提前感谢那些愿意帮助我的人:)

编辑:所以我会用最安全的方式来做,这就是我删除代码的原因。我有一个新的,也许更"可解"的问题。周爵士让我把它贴出来。这是我的注册页面。

<form method="post" class="form-horizontal" action="signup.php">
     <input type="text" class="form-control" name="username" id="username" placeholder= "username">
     <input type="password" class="form-control" name="password" id="password" placeholder="password">
</from>

我的签名_up.php

if(isset($_POST['submit']))
{
$username = $conn->real_escape_string(trim($_POST['username']));
$password = $conn->real_escape_string(trim($_POST['password']));
$new_password = password_hash($password, PASSWORD_DEFAULT);
$query = "INSERT INTO pending(username, password) VALUES('$username','$new_password')";
}

它在pending表中,因为它需要管理员的确认。当管理员确认他的请求时,数据将进入users表。在我的登录中,不同的页面将根据用户的位置进行重定向,无论他是会员还是批量主席。

在忘记密码后向某人发送密码的逻辑本身就是有缺陷的。

考虑一下:他们忘记了密码。没有必要向他们发送相同的密码,因为此时此刻,他们最初使用的密码没有区别。不管怎样,他们都忘记了。无论你给他们发新密码还是旧密码,对最终用户请求都没有什么区别。因为实际上,他们请求的不是新密码,而是登录系统的任何方式。密码,没有密码,他们不在乎。只要给他们一个登录选项,现在他们再也不能登录了。

相反,因为您永远不应该在数据库中存储纯文本密码,所以只需为他们提供一个新密码(密码短语*),让他们在再次登录时输入即可。可以说是密码重置。然后让他们有机会在成功登录后更改新指定的密码,如果他们选择这样做的话

我知道这可能不会直接帮助您解决当前的问题,但在开发有关密码检索/忘记密码的新系统时,请将其视为一个很好的逻辑。

*密码短语很容易记住,但如果做得正确,也会有很大的熵。这是一组自然的单词组成一个短语。向用户发送密码,如B@3&O$$,$fs@太荒谬了。没人记得。甚至10秒钟都不会。但是,如果你给他们提供一个随机的、一次性的、类似红色友好猴子昨天踢足球的密码短语(我只是想了一下!),那么这很容易记住。它具有显著的熵,至少可以让用户登录。如果你愿意,你可以根据你对访问逻辑的规定,强迫他们更改它。

当然,除了新密码和密码短语之外,还有其他方法需要令牌等,这些方法可以自动登录用户,而无需输入新密码/密码短语。他们只需在重置过程中创建一个新密码。但那是另一种情况,我没时间了。