2016-07-02 5 views
0

Ich versuche, remote LDAP-Server zu verwenden. Aus Sicherheitsgründen versuche ich nur eine sichere Verbindung zu verwenden. Ich bin in der Lage, etwas Code zu arbeiten, aber ich bin nicht sicher, angesichts der PHP-Dokumentation von Start TLS selbst, dass, wenn der folgende Code nur auf sicheren Kanal funktioniert. Kann mir bitte jemand helfen?PHP mit TLS für sicheres LDAP

$is_valid_user = FALSE; 

try { 
    $ds = ldap_connect('ldap.foo.com', 389); 
    if (! ldap_set_option($ds, LDAP_OPT_REFERRALS, 0)) { 
     return ""; 
    } 

    if (! ldap_start_tls($ds)) { 
     return ""; 
    } 
} catch(Exception $e) { 
    return ""; 
} 

if (! ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) { 
    $error = "LDAP Server protocol error."; 
    return ""; 
} 

try { 
    $bnd = @ldap_bind($ds, 'uid='.$user.', ou=people, dc=ldap, dc=foo, dc=com' , $passwd); 

    if ($bnd) { 
     $is_valid_user = TRUE; 

     $srch=ldap_search($ds, 'dc=ldap, dc=foo, dc=com', "uid=$user"); 
     $info=ldap_get_entries($ds, $srch); 
     $userdn=$info[0]["dn"]; 
     $usernm=$info[0]["cn"][0]; 

     return $usernm; 
    } else { 
     return ""; 
    } 
} catch(Exception $e) { 
    return ""; 
} 

Antwort

1

Nur ein paar allgemeine Verbesserungen unten. Und ja, wie es geschrieben ist, wird es nicht fortgesetzt, wenn die Verbindung nicht über TLS verschlüsselt ist. Das LDAP-Modul löst momentan keine Ausnahmen aus, daher wird der try/catch-Block nicht wirklich benötigt. Schwer zu sagen, ohne den Rest Ihres Codes zu sehen, aber gibt es einen Grund, warum Sie eine leere Zeichenfolge anstelle von false oder null oder eine Art Fehlermeldung zurückgeben möchten?

$is_valid_user = false; 

$ds = ldap_connect('ldap.foo.com', 389); 
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); 
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 

if ([email protected]_start_tls($ds)) { 
    return ""; 
} 

$bindUser = 'uid='.ldap_escape($user, null, LDAP_ESCAPE_DN).',ou=people,dc=ldap,dc=foo,dc=com'; 
if (@ldap_bind($ds, $bindUser , $passwd)) { 
    $is_valid_user = true; 

    $srch = ldap_search($ds, $bindUser, '(objectClass=*)', ['cn']); 
    $info = ldap_get_entries($ds, $srch); 
    $userdn = $info[0]["dn"]; 
    $usernm = $info[0]["cn"][0]; 

    return $usernm; 
} else { 
    return ""; 
} 

Es gibt auch mehrere LDAP-Bibliotheken, die LDAP mit PHP viel einfacher machen. Ich würde LdapTools oder adldap2 empfehlen.

+0

Vielen Dank. Der Grund für das Zurückgeben einer Null-Zeichenfolge ist, dass diese Zeilen Teil einer Funktion sind, um Informationen von einer Funktion zurückzuholen. Ich hätte auch FALSCH zurückgeben können, vielleicht sollte es sein. Aber dachte, dieser Rückgabetyp ist konsistenter, ein bedeutungsloses Argument in PHP. Wie bei anderen Tools muss ich nur authentifizieren und Namen bekommen, das ist alles. – user926918