2017-06-23 14 views
1

私はPHP 7.1を使用しています。 を開き、LDAP管理ページを作成します。PHP - ldap_add userPassword cryptとpassword_hash

ldap_add()関数を使用する場合。 ['userPassword']フィールドがあります。

以下のコードを使用すると、問題なく動作します。 (塩が存在しない場合は、それは問題ありません)

$entry['userPassword'] = '{crypt}'.crypt('default_password'); 

以下のコードも正常です。

$entry['userPassword'] = '{MD5}'.'base64_encode(pack("H*", md5('default_password'))); 

しかし、私はPHPを読んでcrypt()よりpassword_hash()機能をお勧めします。

LDAP用にpassword_hash()関数を使用できますか?出来ますか?

更新日:

OK。 LDAPパスワードに最適なソリューションは何でしょうか?

$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.'); 
$entry['userPassword'] = '{crypt}'.crypt('defaultpassword', '$2y$10$'.$salt.'$'); 

これは機能しません。

答えて

2

PHPパスワードハッシュメカニズムは、PHP内でのみパスワードを処理する場合に使用します。次に、password_hashを作成し、パスワードを確認するためにpassword_verifyを使用することは素晴らしいことです。ここで使用されるバックエンドは完全に無関係です。

LDAPは一方でパスワードを確認するだけでなく、ユーザーをLDAPサーバーにバインドするためにldap_bindを使用します。それはサーバーにログインするようなものです。そのためには、cryptまたはmd5(これ以上使用しない...)のように使用できるさまざまな暗号アルゴスがあります。

このバインディングメカニズムを使用してログインを確認するには、LDAPサーバがパスワード検証を処理できるようにLDAPサポートのCrypto-Algosを使用する必要があります。

LDAPに保存しているパスワードを使って別のシステム上のバインドを介してLDAP検証を使用する場合は、password_hashを使用することはできません。

あなただけのPHP-のアプリケーションとパスワードを使用したい場合password_hashを使用することができますが、それは、LDAP-Serverは、によって与えられたパスワードを確認するために使用するものであるように私はuserPassword -attributeに入れていないだろうバインド。また、管理者または問題のユーザーとして認証された場合にのみ、通常そのフィールドを読み取ることができます。パスワードはユーザーが処理できないためログインできません。だから、password_hashの解決策よりもはるかに多くのセキュリティ問題をアプリケーションに追加する管理者としてLDAPにバインドする必要があります。

また、複数のシステムで1つのパスワードのようにLDAPの利点を使用しないと、バックエンドとしてLDAPを使用するのはどういう意味ですか?単一のプロジェクトだけのためにLDAPを設定するよりも、データベースに情報を格納する方がはるかに簡単です。

+0

ここで新しい質問をしていますので、 – Horangs

+0

の更新を見てください。新しい質問を作成するのも間違いありませんか?ありがとう! – heiglandreas

1

私が推測するディレクトリによって異なりますが、一般的にLDAPのパスワードをなど、スキーム{MD5}{CRYPT}で保存されている

あなたが何か他のものを使用したい場合は、あるメカニズムに準拠する必要がありますあなたが使用するディレクトリでサポートされています。 password_hashについてのアドバイスについて

、事実があることである:デフォルトのオプションが

  • password_hashを設定して

    • password_hashcryptの唯一のラッパーであるが、専用の認証機構のためのハッシュを作成するためのものではありません

      デベロッパーは、データベースにハッシュを格納し、将来のパスワードとこのハッシュとを、使用されているハッシュメカニズムについての制約なしに比較する必要があります。

    LDAPプロトコルがこれらの認証をサポートしているという事実は、そのディレクトリでサポートされているメカニズムに準拠する必要があります。

    したがって、password_hash関数は、使用されるハッシュメカニズムの選択肢を提供していないようだから、使用できないと言います。あるいは少なくとも、あなたのディレクトリにあるcryptや他のサポートされていて容易に利用できるメカニズムよりも、それを使用するための "セキュリティ"を提供することはありません。

  • 関連する問題