将登录信息存储到数据库的最佳方法是什么?我知道存储平面文本密码是不建议的。其他的方法是什么?如果使用密码的哈希值,PHP中有哪些函数可用于存储和验证登录信息?
我在Windows机器上使用PHP, MySQL, Apache服务器。
在这个安全讨论中有两个阵营:
-
不要在数据库中存储密码。这通常意味着利用OAuth或同等工具。您将需要存储唯一标识用户的"令牌"。这个"令牌"由您选择的身份验证服务提供。
-
在DB中存储密码的哈希(不可逆)转换。然后验证过程是将提供的单词的散列版本与DB中的单词进行比较。
根据您的安全性考虑,应该考虑一些复杂性。我认为最低限度应该是一个盐渍密码实现。这通常类似于:
$hash = sha1(saltThePword($pword));
,
function saltThePword($pword)
{
// combine the password with a salt.
// typically:
// $pword.$salt
// $salt can be static
// $salt can be unique to user (reproducible by a formula)
}
希望对你有帮助。
鲍勃PHP提供md5()
、sha1()
等。一种典型的哈希技术是在纯文本密码中添加"盐",以使暴力破解更加困难。
$pass = 'password';
$salt = 'aLongStringCalledASaltIsOftenUsedToMakeHashingMoreSecure';
$hash = sha1(md5($salt . $pass));
将密码保存为字符串md5('password')当您要检查用户授权时,请使用查询
$res = mysql_query("SELECT id, login, name FROM user WHERE login='".mysql_real_escape_string($login)."'和密码=".md5(密码)美元。"");
我喜欢使用sha2作为我的加密算法,也要确保你的盐在一个安全的地方,而不是在你的数据库下的列或表名为salt