Пример засолки в Zend Framework - PullRequest
3 голосов
/ 14 июня 2010

Я довольно новичок в среде Zend и собираюсь создать приложение с довольно жесткой защитой паролем. Я пытался следовать руководствам пользователя в отношении подбора пароля, но пока мне не повезло. Я настроил адаптер базы данных и таблицы (как описано в документации на сайте Zend Framework, но, похоже, он не закончил пример (или я недостаточно хорошо следую!)

$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter, 
            'users', 
            'username',
'password',                                         "MD5(CONCAT('".Zend_Registry::get('staticSalt')."', ?, password_salt))"
    );

Но как быть с солью пароля? Мне просто нужен пример, и я буду далеко! У кого-нибудь есть пример или указываете мне правильное направление ??

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 14 июня 2010

Отличный пример для безопасного входа с Zend Framework (хотя и с использованием солей)

Пример входа в Zend Framework

1 голос
/ 09 ноября 2011

Метод аутентификации:

/**
 * Authenticate user with specified identity and credential
 *
 * most used case is authenticate user inline in script
 *
 * @param string $identity
 * @param string $credential
 * @return Zend_Auth_Result
 */
public function authenticate ($identity, $credential)
{
    $auth = Zend_Auth::getInstance();
    $adapter = $this->getAdapter();
    $adapter->setIdentity($identity)
            ->setCredential(self::passwordHash($credential));

    $config = Singular_Runtime::extract('config');
    $isActiveCol = $config->resources->auth->columns->is_active;
    $isActiveAllowVal = $config->resources->auth->is_active->allow_value;

    /**
     * @see APPLICATION_PATH/configs/application.ini -> resources.auth
     */
    if (null != $isActiveCol && null != $isActiveAllowVal) {
        $adapter->getDbSelect()->where("{$isActiveCol} = ?", $isActiveAllowVal);
    }

    Singular_Event::dispatch('beforeAuth', array(
        'auth' => $auth, 'adapter' => $adapter
    ));

    $result = $auth->authenticate($adapter);

    if ($result->isValid()) {
        $auth->getStorage()->write($adapter->getResultRowObject());

        Singular_Event::dispatch('afterAuth', array(
            'auth' => $auth, 'adapter' => $adapter
        ));
    }

    return $result;
}

И метод генерации хэша пароля:

/**
 * Password hash generator
 *
 * @static
 * @param  string $password
 * @return string
 */
public static function passwordHash ($password)
{
    $password = strtolower($password);

    return md5(
        str_repeat(
            md5($password) . strrev($password) . sha1($password),
            strlen($password)
        )
    );
}
...