【发布时间】:2019-06-15 06:14:26
【问题描述】:
我得到了这个任务,直到现在,我一直在使用 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>
我知道它应该是一个布尔值,但我不知道如何使用它。
有这方面的分步教程吗?我可能错过了。 谢谢
【问题讨论】:
-
我投票结束您的问题作为重复,因为它太宽泛并且已经多次回答过,即使在 PHP 手册本身中也是如此。但是,如果您有一个有效的问题/错误,您可以编辑您的问题并专注于一个问题。我们很乐意提供帮助。
-
首先通过登录(不使用密码)从数据库中提取用户数据,然后从数据库中获取哈希值并将其与
password_verify的表单输入进行比较。将哈希与数据库查询进行比较实际上是不安全的,仅举一个例子:数据库搜索在 MySQL 中(通常)不区分大小写,但哈希是。因此,由于大小写,您可能有 2 个哈希值发生冲突(被视为相同)。 -
这可能看起来微不足道,但请考虑暴力破解密码时的影响。现在,不是一个在 sha1 中匹配的哈希,而是超过 2^40(我认为,无论如何它比 1 多得多)匹配,只是因为大小写问题。
标签: php mysql sql pdo password-hash