2012-04-11 64 views
0

首先啓用LDAP_bind匿名。是我遇到的問題如下:帶空白用戶名和密碼的ldap_bind()問題

此代碼工作正常沒有問題:

<?php 
$ldaprdn = 'uname'; 
$ldappass = 'password'; 

$ldapconn = ldap_connect("ldap.example.com") 
    or die("Could not connect to LDAP server."); 

if ($ldapconn) { 
    // binding to ldap server 
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); 

    if ($ldapbind) { 
     echo "LDAP bind successful..."; 
    } else { 
     echo "LDAP bind failed..."; 
    } 
} 
?> 

下面這一個返回的「成功」不管是什麼

<?php 
    $ldaprdn = ''; 
    $ldappass = ''; 

    $ldapconn = ldap_connect("ldap.example.com") 
     or die("Could not connect to LDAP server."); 

    if ($ldapconn) { 
     // binding to ldap server 
     $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); 

     if ($ldapbind) { 
      echo "LDAP bind successful..."; 
     } else { 
      echo "LDAP bind failed..."; 
     } 
    } 
    ?> 

注意的憑據在這個版本中留下空白。我不喜歡這樣一個事實,即如果憑證留下空白,這件事情會讓你進去。我做錯了什麼?或者簡單地說,這個ldap_bind()是複雜的。我會認爲,如果我用三個參數調用函數,它不應該默認爲匿名。

我可以通過設置用戶名和密碼爲虛擬值,以防萬一用戶名和密碼留空,但這根本不是好的做法。 請幫助...

出處:http://php.net/manual/en/function.ldap-bind.php

回答

1

你的web應用程序做LDAP認證?如果是這樣,這是你需要做什麼:

  1. 使用一個特權綁定,獲取用戶的DN(或UPN如果使用Active Directory),通過在搜索過濾器使用所提供的用戶名*
  2. 如果失敗,則用戶名不正確,並讓用戶知道用戶名/密碼不正確。
  3. 如果成功,請取DN並使用該DN和提供的密碼重新綁定。
  4. 現在,這應該成功或失敗。

換句話說,不要只傳入用戶名並嘗試使用綁定。

*如果您提供有關您正在嘗試執行的操作以及您使用的LDAP服務器的更多詳細信息,我可以提供更詳細的答案。

+0

謝謝盧卡斯。我正在使用MS「活動目錄」。題? – winteck 2012-04-12 15:30:07

+0

我正在使用MS「活動目錄」。 第一:使用特權綁定(這是否意味着我必須硬編碼該特權帳戶的用戶名和密碼?如果是的話(我試圖避免這種情況) 第二,任何我不應該直接綁定的原因使用提供的憑證?僅供參考:我只是創建一個身份驗證類,以允許用戶使用他們的網絡用戶名和密碼登錄到我的應用程序 感謝盧卡斯 – winteck 2012-04-12 15:37:05

+0

是否每個人都在同一個域?如果是,那麼您可以跳過特權綁定部分,並強制限定每個人的名字,比如「domain \ 」或者使用他們的UPN,就像「[email protected]」。你可以自己搜索AD(和你一樣)找出每個人的UPN是什麼樣子的,通過這樣做你永遠不會發送一個空白的用戶名,因爲,至少它會有「域」或「@域名.suffix」。讓我知道如果這沒有意義。 – 2012-04-12 19:01:14