Хэширование паролей

В TAO для хэширования паролей существует уже готовый механизм(по умолчанию - md5(md5($pass))), который реализуется модулем Digest. Его вызов осуществляется так:

Digest::password($password)

Приведем пример. У нас имеется пароль, введенный пользователем $pass="qwerty". Его хэшем, по указанному механизму будется является значение "897c8fde25c5cc5270cda61425eed3c8".

Однако, бывают случаи, когда необходимо обеспечить более высокий уровень защиты данных, и использование встроенного механизма не устраивает. Что же можно сделать в таких ситуациях?

Использование "соли"

Во-первых, можно использовать алгоритм с добавлением "соли".

К паролю перед хэшированием добавляется случайная строка (соль), которая передается в модуль Digest. Таким образом, для пользователя с паролем «123456» хэш-функция будет выглядеть как md5("md5("123456")соль").

Изменить настройки хэширования можно в config/modules.php(см. в Конфигурировании модулей):

'Digest' => array(
        'password_salt' => 'jhgjhgjhgjh',
),

В данном случае задается значение "соли" = "jhgjhgjhgjh".

Использование собственного алгоритма

Если же и такой вариант не годится, можно прибегнуть к созданию собственного алгоритма. Его можно указать с помощью опции callback:

'Digest' => array(
        'password_encoder_callback' => function($str) {
                return md5(md5(md5(md5($str))));
        },
),

Или создав специальный модуль:

class App_PasswordEncoder implements Core_ModuleInterface
{
        public function encode($str)
        {
                return md5(md5(md5(md5($str))));
        }
}

В конфигурационном файле при этом необходимо добавить следующую опцию:

'Digest' => array(
        'password_encoder_class' => 'App.PasswordEncoder',
),

Проверка хэша

Как же проверить, что мы в итоге получим? Для этого в ТАО существует механизм cms-password-encoder, который представляет из себя форму с полем для ввода пароля(тип поля "password") и полученным результатом хэширования.

Посмотреть как это работает можно по адресу /cms-password-encoder/ (закрывающий слэш обязателен!). Для затруднения брутфорса в функции при обработке запроса установлен "слип" 5 сек.

Поскольку эта функция общедоступна, то может возникнуть вопрос - а можно ли её отключить? Да, это можно сделать через /config/site.php.

->cms
	->password_encoder(false)
->end
16.06.2014
Все статьи