Пример соления в Zend Framework

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

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

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

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


person Geoffrey    schedule 14.06.2010    source источник
comment
Это маленький значок под опцией голосования слева от каждого ответа. Отметить ответ как правильный. Это помогает находить сообщения, на которые были даны ответы, и, если вы чувствуете желание ответить, находить тех, кому нужен ответ. Оба ответа довольно хороши. Возможно, вы захотите принять одно из них. Было бы неплохо сделать.   -  person Andresch Serj    schedule 22.12.2011


Ответы (2)


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

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

person opHASnoNAME    schedule 14.06.2010

Метод проверки подлинности:

/**
 * 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)
        )
    );
}
person Fatalist    schedule 09.11.2011