• 解決済 takuya

    (@takuya)


    wpのパスワード暗号化にはMD5が利用されていると思うのですが、phpmyadminでuser_passを見るとMD5とは違う形で表示されています。これはsaltが関係しているのでしょうか?それともconfig.phpのSECRET KEYが何か関連しているのでしょうか?

    下記のプラグイン利用を試みているのですが、異なる二つのwordpress間において片方のユーザーDBを利用する接続設定でどうしてもうまくいきません。

    http://wordpress.org/extend/plugins/external-database-authentication/

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • phpmyadminでuser_passを見るとMD5とは違う形で表示されています。これはsaltが関係しているのでしょうか?

    WP2.5以降phpassっていうのを採用しているようです(参考:wp-includes/class-phpass.php)。斜め読み程度なので勘違いしているかもしれませんが、セキュリティ上の脆弱性を考慮してのことだと思います(参考:Secure Cookies and Passwords)。

    プラグインの件は無知なため回答できませんが、Codexで紹介されている

    define(‘CUSTOM_USER_TABLE’, $table_prefix.’my_users’);
    define(‘CUSTOM_USER_META_TABLE’, $table_prefix.’my_usermeta’);

    と片方のWordPressのwp-config.php内に追加して、もう片方のユーザデータを同一のデータベース内($table_prefixが複数)で共有させる方法だとダメなんでしょうか?私の場合、この方法で複数のWordPress間のユーザーデータを共有させています。

    また、参考になるかどうか分かりませんが、wp-includes/pluggabel.php内にwp_check_password($password, $hash, $user_id = ”)なんていう関数もあるようです。これをincludeできれば他のアプリでも使えるのかな?

    トピック投稿者 takuya

    (@takuya)

    データベースについては良くわからないのですが、一つのデータベースに複数のwordpressを入れてパフォーマンスに影響とかはないのでしょうか?

    例えば1000ユーザーくらいのwpmuのdbにwordpressを入れて、上記の方法でwpmuユーザー共有とか・・・?

    同じlocalhost内にある異なるデータベース間でもユーザーの共有ができれば一番良いのですが、まったくわかりません。

    また、参考になるかどうか分かりませんが、wp-includes/pluggabel.php内にwp_check_password($password, $hash, $user_id = ”)なんていう関数もあるようです。これをincludeできれば他のアプリでも使えるのかな?

    これがwordpressログイン時に内部でパスワードを認証?確認している方法なのでしょうか?

    となるとプラグイン設定で
    $password2 = wp_check_password($password, $hash, $user_id =”);
    とやれば他のwordpress認証できるのかどうか・・・。

    PS:日本語フォーラムってレスポンス率かなり高いですよね。本家で聞いてもレスポンスがないってことはしょっちゅうあるw

    データベースについては良くわからないのですが、一つのデータベースに複数のwordpressを入れてパフォーマンスに影響とかはないのでしょうか?

    例えば1000ユーザーくらいのwpmuのdbにwordpressを入れて、上記の方法でwpmuユーザー共有とか・・・?

    MySQL自体についてはほぼ無制限とイメージしてよさそうなのですが、MySQLを支えているOSやストレージエンジンの性能がネックになるようです。

    で、ふと私のサイトの環境(共有レンサバ20GB)を調べてみたら、データベースの容量は50MBを限度としてくれ注意書きがなされていました(よそのサーバーでも、共有だと「テーブル数200まで」とかあります)。ユーザー名とかパスワードとかは知れたレベルのサイズでしょうが、日々のデータを収集するアクセス解析とかレイティングのプラグインやらは控えざるをえないかもしれませんし、もとより多くの会員さんを集めようとするならば専用サーバーしか逃げ道はないかもしれませんね。

    となるとプラグイン設定で
    $password2 = wp_check_password($password, $hash, $user_id =”);
    とやれば他のwordpress認証できるのかどうか・・・。

    wp_check_passwordは戻り値がboolean型でTRUEかFALSEのどちらかになるため、主にif文などでその後の処理を記述するときに使います。

    で、同じwp-includes/pluggabel.php内にwp_hash_password($password)というのがありました。wp-includes/class-phpass.phpともつながるので、これがかなり怪しいと思うのですがどうでしょうか?(大変申し訳ありませんが、私の知識レベルだと「これだよ」と断定できません・・汗)

    external-database-authenticationでの設定で言うと、

    1. Otherをセレクトして、
    2. $password2 = wp_hash_password($password);

    あたりかな?自信ないので試すのならばテスト環境でお試しください(苦笑)

    トピック投稿者 takuya

    (@takuya)

    今まで$password2 = md5($password . $user->salt);みたいなことばかり試していました。
    コードを見て適当に思った箇所を入れまくってただけでしたが・・・。

    しかしせっかくご助言いただいたのに、$password2 = wp_hash_password($password);でもinvalid passwordが帰ってきました。

    しかし通常wp-loginからログインする際に、入力されたパスワードとDB内の暗号化されたパスワードを認証する箇所さえわかればヒントになると思うのですが難しそうですね・・・。

    トピック投稿者 takuya

    (@takuya)

    プラグイン利用して一時的にmd5に戻し、ログインしたところできました。
    (phpassの肝心の箇所は未解決のままですが・・・)

    しかし、実際やってみたところユーザー権限が引き継がれない仕様みたいで管理権限が必要な場合全てのユーザーが管理権限を持つことになり大変やっかいなことがわかりました。

    openpneみたいに管理者と一般ユーザーのテーブルが違えば問題ないんだけど・・・。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「wpのパスワード暗号に関してご質問」には新たに返信することはできません。