3

私は Zend フレームワークにかなり慣れていないので、非常に厳しいパスワード セキュリティでアプリケーションを構築しようとしています。パスワードのソルティングに関してユーザー ガイドに従おうとしてきましたが、今のところ成功していません。データベースとテーブル アダプターをセットアップしました (Zend Framework サイトのドキュメントに記載されているとおりですが、例を完成していないようです (または、十分にフォローしていません!)。

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

しかし、ここから、パスワードのソルトで何が行われるのでしょうか? 私はちょうど例が必要です、そして私は離れます!誰かが例を持っているか、私を正しい方向に向けていますか??

どうもありがとう!

4

2 に答える 2

2

Zend Framework を使用した安全なログインの優れた例 (ただし、ソルトを使用)

Zend Framework でのログイン例

于 2010-06-14T09:43:51.670 に答える
1

認証方法:

/**
 * 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)
        )
    );
}
于 2011-11-09T12:25:54.873 に答える