如何使用密码散列和PDO使我的代码更安全?

如何使用密码散列和PDO使我的代码更安全?

我的代码实际上正在工作,但它根本不安全,我不想使用MD5,因为它并不那么安全。我一直在查找密码哈希,但我不知道如何将它合并到我的代码中。


登录:


require_once __DIR__.'/config.php';

session_start();


$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_USERNAME, DB_USERNAME, DB_PASSWORD);


$sql = "SELECT * FROM users WHERE username = :u AND password = :p";

$query = $dbh->prepare($sql); // prepare

$params = array(":u" => $_POST['username'], ":p" => $_POST['password']);

$query->execute($params); // execute


$results = $query->fetchAll(); // then fetch



//hash passwords pls


if (count($results) > 0 ){

$firstrow = $results[0];

$_SESSION['username'] = $firstrow['username'];

echo "Hello $username you have successfully logged in";

//header ("location:.php");

}

else{

echo "Login Has Failed";

return;

登记册:


$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_USERNAME, DB_USERNAME, DB_PASSWORD);


$username = $_POST["username"];

$email = $_POST["email"];

$password = $_POST["password"];


$stmt = $dbh->prepare("insert into users set username='".$username."', email='".$email."', password='".$password."' ");

$stmt->execute();

echo "<p>Thank you, you are registered</p>";

有人能告诉我如何将它合并到我的代码中吗?


狐的传说
浏览 753回答 3
3回答

繁星淼淼

基本上,您有两个选项,复杂程度各不相同:使用您选择的哈希算法存储注册用户密码的哈希(稍后将详细介绍)。创建一个随机盐(一个常量、秘密字符串),与用户的密码一起使用,如上面所述,创建哈希,然后将该哈希存储在DB中。检索用户记录时,可以将从提供的密码计算出来的哈希与存储在DB中的哈希进行比较。例子:$HashedPass&nbsp;=&nbsp;hash('sha512',&nbsp;$password);或者用预定义的盐:$HashedPass&nbsp;=&nbsp;hash('sha512',&nbsp;$password.SALT_STRING);和之前一样,将其存储到DB中。以类似方式认证:$HashedPass&nbsp;=&nbsp;hash('sha512',&nbsp;$password.SALT_STRING);然后根据与存储的哈希比较从DB检索。现在,我想谈谈您对散列算法的关注:您不必使用MD5,您还可以使用更安全的散列算法,请参阅下面的注释:PHP散列函数一个建议是使用Sha 512算法。最重要的是,您应该理解哈希是一个单程转换-没有实用的方法来从哈希单独反向工程原来的密码,可能只是找到替代字符串,这会产生相同的哈希字符串。我希望您发现使用强大的哈希算法,连同一个盐,以减轻被窃取的哈希数据库的损害,足以满足您的需要。
打开App,查看更多内容
随时随地看视频慕课网APP