在数据库中存储登录信息的方法


Methods for storing login information in database

将登录信息存储到数据库的最佳方法是什么?我知道存储平面文本密码是不建议的。其他的方法是什么?如果使用密码的哈希值,PHP中有哪些函数可用于存储和验证登录信息?

我在Windows机器上使用PHP, MySQL, Apache服务器。

在这个安全讨论中有两个阵营:

  1. 不要在数据库中存储密码。这通常意味着利用OAuth或同等工具。您将需要存储唯一标识用户的"令牌"。这个"令牌"由您选择的身份验证服务提供。

  2. 在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