我得到了这份任务,直到现在,我一直在使用sha1进行安全保护。 上星期五,老师回到了我们身边,告诉我们使用password_hash。 知道这是明天的事,我试图弄清楚它是如何工作的,但不要把我的头缠住。 我发现有很多人在谈论它,但这些都不对我有用: How to use password_hash Register And Login
目前,按照分配的权限,我仅使用PDO并返回到以前的工作代码(使用sha1)
<?php
ob_start();// TEST
include("inc/timer.inc.php");//session
require("inc/database.inc.php");//connection website
$title='website';
if (isset($_POST['formConnection'])) {
$loginConnection = filter_input(INPUT_POST, 'loginConnection', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
// Connection sha1- OLD
$passwordConnection = sha1($_POST['passwordConnection']);
// Connection password_hash
//$hash = $profile['password'];
//$passwordConnection = password_verify($_POST['passwordConnection'], $hash);
if (!empty(($loginConnection) AND !empty($passwordConnection))) {
$connection = $website->prepare("SELECT * FROM members WHERE login = ? AND password= ?");
$connection->execute(array($loginConnection, $passwordConnection));
$userExists = $connection->rowCount(); //Test existence et affectation à la session des valeurs
if ($userExists == 1) {
$profile = $connection->fetch();
$_SESSION['idMember'] = $profile['idMember'];
$_SESSION['login'] = $profile['login'];
$_SESSION['status'] = $profile['status'];
header("Location: member-detail.php?idMember=".$_SESSION['idMember']);
} else {
echo "<script>alert(\"Wrong login or password\")</script>";
}
} else {
echo "<script>alert(\"Please check your login or your password\")</script>";
}
}
?>
<body>
<form method="post" action="">
<div class="form-group">
<label for="loginConnection">login</label><br>
<input type="text" class="form-control" name="loginConnection" id="loginConnection"
placeholder="login" required><br><br>
</div>
<div class="form-group">
<label for="passwordConnection">password</label><br>
<input type="password" class="form-control" name="passwordConnection" id="passwordConnection"
placeholder="Mot de Passe" required><br><br>
</div>
<input type="submit" name="formConnection" value="Se connecter">
<div class="form-group">
<a href="subscribe.php">Not subscribed yet?</a>
</div>
</form>
<br><br>
</body>
我知道它应该是布尔值,但我不知道如何使用它。
是否有循序渐进的教程?我可能已经错过了。 谢谢
答案 0 :(得分:2)
password_verify()
函数将与password_hash()
函数结合使用。
您将从password_hash()
生成的哈希存储在数据库中。当某人尝试登录时,您可以根据哈希测试他们提供的密码。如果password_verify()
返回true,则密码匹配。
您不应该使用password_hash()
重新哈希密码,因为you will get a different answer every time(如果使用随机盐,则应该这样做)。当您使用password_hash()
对密码进行哈希处理时,默认情况下,它会使用随机盐对密码进行哈希处理。该随机盐将被编码为结果哈希字符串,以便password_verify()
可以使用与原始哈希相同的盐对其进行验证。
基本上,应该为试图登录的用户从数据库中检索哈希,并将其提供给password_verify()
函数。除了盐之外,哈希还包含有关使用哪个哈希算法的信息。
<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
答案 1 :(得分:0)
您必须从数据库中获取用户,然后使用password_verify
检查密码。因此,仅SELECT * FROM members WHERE login = ?
,然后在if ($userExists == 1) {
内部,如果password_verify($_POST['passwordConnection'], $profile['password')
为假,登录将失败。