Какой самый безопасный способ сохранить пароль с помощью Code Igniter? - PullRequest
11 голосов
/ 12 августа 2011

Я использую Code Igniter для моего текущего проекта.

На данный момент я использую MD5 для хеширования пароля, но я читал во многих местах, что это не очень хорошая практика.

С чем мне идти?

  1. Использование соли
  2. Или я должен использовать bcrypt

Кроме того, если рекомендуется bcrypt , как использовать его с Code Igniter?

EDIT

Я поместил эти файлы в application/libraries

  1. PasswordHash.php
  2. с / Makefile
  3. с / crypt_private.c

В моем контроллере я использую этот код -

$params = array(
       'phpass_hash_strength' => 8,
           'phpass_hash_portable' => FALSE
       );
$this->load->library('PasswordHash', $params);
$password = $this->passwordhash->HashPassword($pwd);

Я получаю эти ошибки -

A PHP Error was encountered

Severity: Notice

Message: Uninitialized string offset: 3

Filename: libraries/PasswordHash.php

Line Number: 116

A PHP Error was encountered

Severity: Warning

Message: strpos() [function.strpos]: Empty delimiter

Filename: libraries/PasswordHash.php

Line Number: 116

Обновление

Удалено PasswordHash.php, используется SimpleLoginSecure сейчас.

Ответы [ 3 ]

16 голосов
/ 12 августа 2011

Используйте bcrypt.Эта дискуссия возникла здесь в комментариях к моему ответу.Вы можете использовать библиотеку, такую ​​как phppass , чтобы действительно упростить шифрование пароля.

По вопросу соли.Используй это!В противном случае кто-то может просто зайти на этот сайт и загрузить радужные таблицы, которые будут охватывать большинство паролей, которые выбирают средние пользователи.Особенно с учетом всех утечек в системе безопасности за последние несколько месяцев, сейчас не время говорить о том, что вы не будете использовать что-то настолько простое для реализации, как случайная соль.

ОБНОВЛЕНИЕ

Чтобы использовать PHPPass с CI, загрузите и извлеките файлы с веб-сайта phppass, указанного выше.Поместите файл PasswordHash.php в каталог приложений / библиотек CI.

В своем коде вы затем загружаете библиотеку с помощью: $this->load->library('PasswordHash',array(8, FALSE));

Хэширование паролей тогда просто, как $this->PasswordHash->HashPassword($password);

Чтобы позже проверить правильность пароля, достаточно просто:

$password = $_POST['password'];
$actualPassword = /*Get the hashed password from your db*/;

$check = $this->PasswordHash->CheckPassword($password, $actualPassword);

Я взял это демо из http://dev.myunv.com/articles/secure-passwords-with-phpass/, которое дает вам гораздо больше информации,Я немного изменил это руководство, чтобы использовать загрузчик CI, поэтому вам не нужны операторы include или new.

5 голосов
/ 12 августа 2011

зачем использовать md5(), когда его так же просто использовать sha1()?

Также хорошая защита паролей - это всегда хорошая идея, поскольку она эффективно устраняет угрозу Rainbow Table атаки

По моему опыту, соленый хеш SHA1 достаточно безопасен для 99% ситуаций с веб-приложениями.

3 голосов
/ 06 января 2015

Код Igniter изменился с момента, когда этот вопрос был задан.Но в интересах тех, кто, возможно, не сталкивался с обширной документацией CI или не видел этого раньше, CI имеет класс шифрования, который обеспечивает двустороннее шифрование данных с использованием библиотеки Mcrypt PHP.

После инициализации класса с помощью:

$this->load->library('encrypt');

Вы можете зашифровать следующим образом:

$msg = 'My secret message';
$encrypted_string = $this->encrypt->encode($msg);

и расшифровать следующим образом:

$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);

CI также имеет не-декодируемое одностороннее хеширование:

$hash = $this->encrypt->sha1('Some string');

Для получения дополнительной информации см .: http://www.codeigniter.com/user_guide/libraries/encryption.html

...