0

Symfony2 を使用して構築された Web サイトから Silverstripe 3 にユーザーを移行する際に助けが必要です。

sha1 ハッシュ化されたパスワードとソルトを使用して、symfony で構築された Web サイトからユーザーのテーブルを取得しました。新たにセットアップした Silverstripe 3 Web サイトにユーザーをインポートしたいと考えています。ハッシュ化されたパスワードとソルトを手動で挿入し、パスワード暗号化アルゴリズムを に変更して、SS3 のメンバー テーブルにサンプル エントリを挿入しようとしましたが、うまくいきsha1ませんでした。また、パスワード暗号化をブローフィッシュからオーバーライドするために使用しようとしSecurity::set_password_encryption_algorithmましたが、パスワードアルゴリズムは変更されていないようです。_config.phpsha1

プロジェクトの納品まであと数日しかないので、これについて本当に助けが必要です。移行をどのように行うべきかについてのアイデアはありますか?

4

2 に答える 2

1

symfony2 のパスワード暗号化は、パスワード + ハッシュを 1 回だけでなく何度も暗号化します (デフォルトは 5000 です)。また、symfony はパスワードとハッシュを次のように連結します。

$password . '{' . $salt . '}'

Silverstripe 3 でこの手法を再現するか、Silverstripe 3 アプリケーションで symfony 暗号化を使用する必要があります。を参照すると、実装を確認できますSymfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder

もう 1 つの方法は、各パスワードをリセットし、新しいアプリケーションが公開されたらすべてのユーザーに電子メールを送信して、ユーザーが自分のパスワードを追加できるようにすることです。この場合、パスワードを移行する必要はありません。これは、長期的にはより適切に機能する可能性があります。

于 2012-12-29T11:58:23.193 に答える
0

そのために、SSで独自のパスワード「暗号化」クラス(100%正しい命名ではありません...)を作成できます。私はSF2の実装を見てきましたが、これはテストされていない出発点です。ソルトの中括弧はチェックしません。

    <?php
class PasswordEncryptor_Symfony2 extends PasswordEncryptor {
    protected $algorithm = 'sha512';
    protected $iterations = 5000;
    protected $encodeHashAsBase64 = true;
    public function encrypt($password, $salt = null, $member = null) {
        $salted = $password . '{' . $salt . '}';
        $digest = hash($this->algorithm, $salted, true);
        for ($i = 1; $i < $this->iterations; $i++) {
            $digest = hash($this->algorithm, $digest.$salted, true);
        }

        return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest);
    }
}

mysite/_config/encryptors.yml で、YML 構成を介してこのクラスを登録する必要があります。

PasswordEncryptor:
  encryptors:
    symfony2:
      PasswordEncryptor_Symfony2: 

mysite/_config.php で (必要に応じて) デフォルトとして設定します。

Security::set_password_encryption_algorithm('symfony2');

SF2 から移行された既存のハッシュがこのクラスで確実にチェックされるようにするにPasswordEncryptionは、テーブルの列Memberを「symfony2」に設定する必要があります (これらのタイプの移行を可能にするために、各メンバーには使用される暗号化エイリアスが個別に設定されています)。したがって、SS で作成された新しいユーザーは、デフォルトの SS パスワード ハッシュ (「blowfish」エイリアス) を引き続き使用できます。

于 2013-01-02T08:48:05.307 に答える