我一直在尝试写一个简单的登录几天。在我认为我有它工作之后,我意识到它会接受密码字段中的任何输入为真,所以我废弃它并重新开始。我正在尝试使用php函数password_verify
进行验证,但无论我做什么,它总是返回true。有什么我做错了吗?这是我的代码(我知道它不安全,我只是想让它现在识别错误的密码)
if(isset($_POST['submit']))
{
$username = $_POST['username'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
if(password_verify($_POST['password'], $hash))
{
echo 0;
}
else
{
echo 1;
}
}
答案 0 :(得分:2)
它始终返回true的原因是因为您正在验证刚刚创建的哈希值...它将始终被正确验证。
使用password_verify()
函数时,$hash
参数必须来自其他地方(通常是某种数据库)。
// If this is a POST request then handle the form
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Get password from form
$pass = filter_input(INPUT_POST, 'password', FILTER_UNSAFE_RAW);
// Connect to a database of some kind
// Get a previously hashed password
$hash = 'A HASH FROM SOMEWHERE ELSE...';
// Verify the previously hashed password
// against the password provided by the user
if (password_verify($pass, $hash)) {
echo 'Password is valid!';
}
}
答案 1 :(得分:0)
您使用发布密码检查帖子密码。您应该使用想要的密码检查帖子密码。
答案 2 :(得分:0)
您正在为通过POST收到的密码分配$hash
。
password_verify
的工作原理
boolean password_verify ( string $password , string $hash )
验证给定的$hash
是否与收到的密码匹配。
现在,您正在检查存储在$hash
中的密码,并使用在POST中获得的密码相同。
因此总是如此。
答案 3 :(得分:0)
您$password
获得$_POST['password'];
您是hash
$password
$_POST['password'];
password_verify($_POST['password'], $hash)
您正在将$_POST['password']
与hash
进行比较。 hash
也是$_POST['password']
。
这就是为什么他们总是返回真实。因为$passwod
,hash
$_POST['password']
是相同的。