2011-09-29 112 views
0

假設一個應用程序可以配置爲使用LDAP服務器 - 無論是ActiveDirectory還是OpenLDAP等 - 用於對其用戶進行身份驗證並檢索有關用於授權目的的一些附加信息。應用程序綁定到LDAP服務器的方式也是可配置的 - 它可以使用簡單或SASL綁定,具體取決於LDAP服務器支持的內容和整體安全要求。檢查LDAP服務器的憑證

假設如果綁定成功與用戶提供的任何憑據,那麼它必須表示這些憑據是有效的。然而,情況並非總是如此;可能會發生簡單的綁定成功,即使在提供空密碼的情況下,實際上也會出現非空密碼。根據RFC about LDAP authentication methods,具有非空用戶名和空密碼的簡單綁定被解釋爲意圖通過匿名授權建立未經身份驗證的連接。可以將服務器配置爲通過unwillingToPerform嘗試失敗,但也可以允許它們。

問題是:在這種情況下,應用程序可以配置爲使用各種LDAP服務器,並以可配置的方式綁定 - 簡單或通過SASL - 是否有明確檢查用戶憑據的方式針對特定的LDAP服務器輸入內容,而不是試圖綁定這些憑據,因爲簡單的綁定會導致誤報?

謝謝,我期待着您的回覆。

回答

0

當然,你所要做的就是禁止或者甚至只記得密碼爲空的情況?

+0

事實上,一種可能性是不允許預先提供空密碼。但是,我試圖找出是否有另一種方法來解決這個問題。 –

+0

@Catalina Caloian'甚至只記得'。有3例。 1.服務器不允許沒有密碼的簡單身份驗證:問題消失了。 2.用戶沒有輸入密碼,用戶輸入密碼:沒問題;這是你正在試圖識別的情況。 3.用戶沒有密碼=>這不是你的問題,這是一個不安全的服務器;沒有辦法檢查憑據,因爲沒有憑據要檢查。 – EJP

+0

我試圖使用'ldap_compare'比較'用戶密碼'的值與用戶提供的一個,如[這裏]指出的(http://stackoverflow.com/questions/4066265/ldap-how-to-check-一個-用戶名 - 密碼的組合)。但是,它似乎不適用於ActiveDirectory,並且這是一個顯示屏。最後,我添加了一個不允許空密碼的設置。 –

0

在PHP中,至少,你就必須做到這一點:

<?php 
$ds = ldap_connect($ip_address); 
if(@ldap_bind($ds, $username, $password) { 
    // Login successful! 
} else { 
    // Login unsuccessful :(
} 
?> 

你的情況可能與其他語言不同,但是這很適合我。