为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2019-07-04 17:47:16
如何使用密码散列和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 plsif (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>";有人能告诉我如何将它合并到我的代码中吗?
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

基本上,您有两个选项,复杂程度各不相同:

  • 使用您选择的哈希算法存储注册用户密码的哈希(稍后将详细介绍)。
  • 创建一个随机盐(一个常量、秘密字符串),与用户的密码一起使用,如上面所述,创建哈希,然后将该哈希存储在DB中。

检索用户记录时,可以将从提供的密码计算出来的哈希与存储在DB中的哈希进行比较。

例子:

$HashedPass = hash('sha512', $password);

或者用预定义的盐:

$HashedPass = hash('sha512', $password.SALT_STRING);

和之前一样,将其存储到DB中。

以类似方式认证:

$HashedPass = hash('sha512', $password.SALT_STRING);

然后根据与存储的哈希比较从DB检索。

现在,我想谈谈您对散列算法的关注:您不必使用MD5,您还可以使用更安全的散列算法,请参阅下面的注释:PHP散列函数一个建议是使用Sha 512算法。

最重要的是,您应该理解哈希是一个单程转换-没有实用的方法来从哈希单独反向工程原来的密码,可能只是找到替代字符串,这会产生相同的哈希字符串。

我希望您发现使用强大的哈希算法,连同一个盐,以减轻被窃取的哈希数据库的损害,足以满足您的需要。


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 690 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信