web-dev-qa-db-ja.com

Joomla3.2.1パスワード暗号化

ユーザーがサイトに登録し、パスワードテーブルのデータベースjoomla_usersを調べると、次の形式で保存されているパスワードがあります。

  • $ P $ Do8QrURFT1r0NlWf0X/grdF/aMqwqK /

  • $ P $ DH38Lch9z508gJiop3A6u0whTity390

  • ......。

ただし、ドキュメントに記載されている形式ではありません(MD5 + ":" + SALT):

  • 1802ebc64051d5b4f4d1b408babb5020:0PHJDbnsyX05YpKbAuLYnw2VCzFMW2VK

ユーザーの資格情報をチェックしてパスワードの一致をチェックする外部スクリプトを使用しているため、これを明確にする必要があります。

私のPHPスクリプトには、データベースのパスワードからSALTを分離するコードがあります。

$parts   = explode( ':', $password_database );
$crypt   = $parts[0];
$salt   = $parts[1];

しかし、二重の結び目がない場合、私はそれを行うことはできません(:)

11
Gregor

これを試して、

次のコードは、Joomlaの標準パスワードを作成しています(古いバージョン1.5、1.7など)

 jimport('joomla.user.helper');
 $salt = JUserHelper::genRandomPassword(32);
 $crypt = JUserHelper::getCryptedPassword($password_choose, $salt);
 $password = $crypt.':'.$salt;

Joomla 3.2+ PHPのパスワードアルゴリズムを導入bcryptただし、最低限必要なものPHP 5.3 +使用bcryptサーバーがPHPバージョンがこれに対応していることを確認してください 詳細はこちら

次の方法を使用するJoomlaの他のバージョン(Joomla 3.x

 jimport('joomla.user.helper');
 $yourpass = JUserHelper::hashPassword($password_choose);

古いアルゴリズムは最新バージョンでも正常に機能します。違いは、古いバージョンでは65文字のパスワードが作成され、新しいバージョンでは34文字の文字列が作成されることだけです。常に更新されたバージョンで行く

また、外部スクリプトを使用している場合は、以下のようなJoomlaフレームワークを含める必要があります。これは、外部phpファイルの一番上にあるはずです

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

また、ユーザーの資格情報を確認する必要があり、パスワードの形式を確認する必要はなく、フレームワークの読み込み後に以下のコードを使用するだけだとおっしゃいました。

   $credentials['username'] = $data['username']; //user entered name
   $credentials['password'] = $data['password']; //users entered password
   $app = JFactory::getApplication();
   $error = $app->login($credentials, $options);
   if (!JError::isError($error)) {
    // login success
    }
  else{
    //Failed attempt
   }

それが役に立てば幸い..

15
Jobin Jose

Joomlaのデフォルトのユーザークラスは、パスワードのハッシュにソルトMD5を使用しなくなりました。 JUserクラスのbind関数がJUserHelper::hashPassword($array['password'])を呼び出してパスワードを暗号化するようになりました。

その関数は現在これです:

public static function hashPassword($password)
    {
            // Use PHPass's portable hashes with a cost of 10.
            $phpass = new PasswordHash(10, true);

            return $phpass->HashPassword($password);
    }

そしてそれはあなたがここでもっと読むことができるPHPassに今依存していることを意味します: http://www.openwall.com/phpass/ 。このサイトの紹介だけを読んだことから、暗号化はMD5ではなくbcryptになっていると思いますが、Joomlaがデフォルトの暗号化を上書きした可能性があります。

10
David Fritsch

David Fritschの回答により、Joomlaと同じように暗号化されたパスワードを実行できます。

<?php
    define( '_JEXEC', 1 );
    define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
    define( 'DS', DIRECTORY_SEPARATOR );

    require_once( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once( JPATH_BASE .DS.'includes'.DS.'framework.php' );

    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();

    jimport('joomla.user.helper');
    $password = "test";     
    echo "<strong>Password: </strong>" . JUserHelper::hashPassword($password);
?>

ファイルをjoomlaルートディレクトリに保存するか、JPATH_BASEを変更する必要があることに注意してください。

5
Mikel