我正在寻找一种简单(或尽可能简单)但安全的方法,用于在将用户密码提交到数据库然后从数据库中检索时对其进行散列和加盐处理。在过去 3 个小时的研究中,实际上有数百种不同的方法,每个人都会说是最好的方法。
我正在寻找一种相对简单的方法来保证用户帐户的安全。显然,安全一词可以有不同的解释,但我只是希望它至少对于潜在的黑客(或任何你称之为悲伤的人)来说很难获得对用户帐户的访问权限。
我很感激我至少应该尝试一些事情,但对于我的目的来说,它们似乎都如此复杂且过于安全。
我尝试使用password_hash()
,但似乎我正在运行比 5.5 更早的 PHP 版本。我知道下面的代码存在问题,但这只是我正在从事的个人项目的起点,以便更好地学习 PHP。
目前的登记表
$username = $_POST['username'];
$password = $_POST['password'];
try {
$result = $db->prepare("INSERT INTO
user_info
SET
username = :user,
pass = :pass
");
$result->bindParam(':user', $username);
$result->bindParam(':pass', $password);
$result->execute();
}
catch (Exception $e) {
echo "Could not create username";
}
if (isset($_POST['submit'])) {
foreach ($_POST as $field) {
if (empty($field)) {
$fail = true;
}
else {
$continue = false;
}
}
if ($field == $fail) {
echo "You must enter a username and/or password";
}
else {
echo "Your account has been successfully created.";
}
}
登录逻辑
$username = $_POST['username'];
$password = $_POST['password'];
try {
$result = $db->prepare("SELECT username, pass FROM user_info WHERE username = :user AND BINARY pass = :pass");
$result->bindParam(':user', $username);
$result->bindParam(':pass', $password);
$result->execute();
$rows = $result->fetch(PDO::FETCH_NUM);
}
catch (Exception $e) {
echo "Could not retrieve data from database";
exit();
}
if ($password = $rows) {
session_start();
$_SESSION['username'] = $_POST['username'];
$_SESSION['loggedin'] = true;
include("inc/redirect.php");
} else {
if (isset($_POST['login'])) {
echo "Username or password incorrect (passwords are case sensitive)";
}
}