MongoDB,PHP和身份验证

时间:2013-06-06 02:16:53

标签: php mongodb

我正在玩一些项目来学习MongoDB,我想要添加的其中一项是网站的身份验证机制。

使用传统的RDBMS时,您可以找到大量的库来自动化许多复杂的身份验证,MongoDB有什么东西吗?

我要找的是:

a)简单易用的东西,与MongoDB开箱即用,或者 b)一些非常简单的东西,我可以在其上输入密码并从中获得理智的哈希值。

那里有类似的东西吗?

注意:我不是在讨论内置的MongoDB身份验证。我的意思是我想在使用MongoDB作为数据存储的网站中构建身份验证层。如果所有其他方法都失败了,只要我有一些关于抽取盐渍/散热的好东西,我就可以完成繁重的工作,所以我不必担心它是正确的。

2 个答案:

答案 0 :(得分:1)

PHP具有您需要的哈希函数。我更喜欢使用hash_pbkdf2(),但它仅适用于PHP的后期版本。所以我经常使用标准化程度较低的crypt()函数。

它们的工作方式基本相同:您使用密码,算法和一些盐,并且密码多次(数千)。输出哈希包括进入它的额外参数(算法,盐和轮次),因此您可以在有人尝试登录时重新创建哈希。

这两种技术的优点是:

  • 您可以选择哈希算法
  • 添加随机盐使词典攻击更加困难
  • 额外几轮哈希使得暴力攻击更加困难。

我写了一个简短的例子,有一个小单元测试。

/*  Hashes a password using 2000 rounds of SHA-256 and a random salt. 
    Returns a string.
*/
function hashpw($password) {
    $algo = '$5$rounds=2000$'; // specify SHA-256
    $salt = $algo . mt_rand();
    return crypt(strval($password), $salt);
}

/*  Given a password and a hash produced by hashpw(), tells you if the hash
    belongs to the password or not.  
    Returns a boolean. 
*/
function confirmpw($password, $hash) {
    return (crypt(strval($password), strval($hash)) === $hash);
}

$passwords = array(
    'hello world',
    'secret',
    'super-secret',
    'my pets name',
);

foreach($passwords as $onePass) {
    $hash = hashpw($onePass);
    $verified = confirmpw($onePass, $hash) ? 'verified' : 'failed' ;

    echo "$onePass ==> $hash ==> $verified \n";
}

答案 1 :(得分:0)

Codeigniter有这个:https://github.com/pawankorotane/mongodb-tank-auth

如果您没有使用CodeIgniter,您可以随时检查代码并修改您使用的框架。