0

SQL クエリをテストしていて、ユーザーとパスワードを正しく入力していますが、一致していません。

クエリの出力は次のとおりです。

SELECT * FROM wp_users where user_login='User' and user_pass='pass'

正しく入力したのに、まだ false を返していることがわかります。

パスワードがデータベースの md5 にあることはわかっています。

クエリで変数をデコードする必要がありますか? もしそうなら、どのように?

私はこれを試しましたが、うまくいきませんでした:

$SQL =   "SELECT * FROM wp_users where user_login='".$username."' and user_pass='".md5($password)."'";

アップデート:

これは md5($password) の内容です - 3fc0a7acf087f549ac2b266baf94b8b1

これがデータベースの内容です: $P$BfzHHqBF88q4RHJsAiVf4m7.ulbgCZ1

どちらも同じはずです:o/

4

4 に答える 4

1

最も簡単なのは、Wordpress の関数 wp_hash_password(password) を呼び出すことです。その場合、クエリは次のようになります。

require_once '/path/to/wp-config.php';  //will load up wordpress, such as if you're doing this from a script
$SQL =   "SELECT * FROM wp_users where user_login='".$username."' and user_pass='".wp_hash_password($password)."'";

Wordpress は標準の MD5 を使用せず、phpassライブラリを使用してユーザー パスワードをハッシュします。したがって、Wordpress の外部からこれを実行しようとしている場合は、そのライブラリを調べる必要があります。phpass を使用して wp_hash_password() メソッドを実装するコードは次のとおりです。

if ( !function_exists('wp_hash_password') ) :
/**
 * Create a hash (encrypt) of a plain text password.
 *
 * For integration with other applications, this function can be overwritten to
 * instead use the other package password checking algorithm.
 *
 * @since 2.5
 * @global object $wp_hasher PHPass object
 * @uses PasswordHash::HashPassword
 *
 * @param string $password Plain text user password to hash
 * @return string The hash string of the password
 */
function wp_hash_password($password) {
    global $wp_hasher;

    if ( empty($wp_hasher) ) {
            require_once( ABSPATH . 'wp-includes/class-phpass.php');
            // By default, use the portable hash from phpass
            $wp_hasher = new PasswordHash(8, TRUE);
    }

    return $wp_hasher->HashPassword($password);
}
endif;

同じパターンに従うことで、おそらく同じコンテンツを取得できます。

require_once '/path/to/wp-includes/class-phpass.php';
$my_hasher = new PasswordHash(8, TRUE);
$SQL =   "SELECT * FROM wp_users where user_login='".$username."' and user_pass='". $my_hasher->HashPassword($password)."'";
于 2012-06-27T19:32:51.940 に答える
0

データベースのパスワードはCrypt機能で保存されているようです..見てください:

$pw="thisismypassword";
echo crypt($pw);    // $1$lmJBSDCp$AcU45N45sUhdglYn28T4X/
echo md5($pw);  //31435008693ce6976f45dedc5532e2c1

クエリで crypt を使用してみてください。Crypt は、私が wp_config.php ファイルで信じている "Salt" も使用します。

于 2012-06-27T19:32:43.530 に答える
0

INSERT/UPDATE wp_users コマンドで使用されている暗号化機能を確認してください。MySQL にはたくさんの暗号化関数があります。こちらをご覧ください。

ログイン目的で、Password(string)よく使用されます。

于 2012-06-27T19:58:27.693 に答える
0

パスワードがデータベースに保存される前にソルトされていないことを確認してください。もしそうなら、あなたは次のようなことをする必要があります:

$SQL =   sprintf("SELECT * FROM wp_users where user_login='%s' and user_pass='%s'", $username, md5($salt.$password));

また、まっすぐなmysqlではなく、mysql_real_escape_stringとPDOの準備済みステートメントも調べます

于 2012-06-27T19:08:13.287 に答える