Хэширование паролей
В 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