2013-06-06 2 views
0

Я играю с несколькими проектами, чтобы изучить MongoDB, и одна из вещей, которые я собираюсь добавить, - это механизм аутентификации на веб-сайте.MongoDB, PHP и аутентификация

При использовании традиционной СУРБД вы можете найти множество библиотек для автоматизации множества тонкостей аутентификации, есть ли что-то для MongoDB?

Я либо ищу:

а) что-то, что просто и работает из коробки с MongoDB или б) то, что это достаточно просто, что я могу просто бросить пароли на него и получить разумный хеш.

Есть ли что-нибудь в этом роде?

ПРИМЕЧАНИЕ. Я не говорю о встроенной аутентификации MongoDB. Я хочу сказать, что я хочу создать уровень аутентификации на веб-сайте, который использует MongoDB в качестве хранилища данных. Если все остальное терпит неудачу, я могу сделать тяжелый подъем, пока у меня есть что-то хорошее, чтобы абстрагироваться от соления/хэширования, поэтому мне не нужно беспокоиться о том, чтобы понять это правильно.

ответ

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"; 
} 
0

Там это для Codeigniter: https://github.com/pawankorotane/mongodb-tank-auth

В случае, если вы не используете CodeIgniter, вы всегда можете проверить код и изменить для рамок, которые вы используете.

+0

Это не очень легко преобразовать в обычное PHP-приложение, также, судя по отсутствию его использования, я бы сказал, что он не проверен и не проверен – Sammaye

Смежные вопросы