Start · Sprachen · PHP · Referenz · ldap_bind

ldap_bind

Funktion

Authentifiziert (bindet) eine Verbindung an einem LDAP-Verzeichnis mit optionalem Distinguished Name und Passwort.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_bind(LDAP\Connection $ldap, ?string $dn = null, #[\SensitiveParameter] ?string $password = null): bool

Beschreibung

ldap_bind() führt eine Anmeldung (sog. Bind-Operation) an einem LDAP-Server durch. Ohne Angabe von dn und password erfolgt ein anonymer Bind, sofern der Server dies erlaubt. Wird ein Distinguished Name (DN) zusammen mit einem Passwort übergeben, handelt es sich um einen authentifizierten Bind, der Zugriff auf geschützte Verzeichniseinträge ermöglicht.

Die Funktion wird typischerweise nach ldap_connect() aufgerufen, um die Verbindung zu autorisieren, bevor Such- oder Schreiboperationen (ldap_search(), ldap_add() usw.) durchgeführt werden. Ohne vorherigen Bind schlagen die meisten LDAP-Operationen fehl oder liefern eingeschränkte Ergebnisse.

Ab PHP 8.1 ist der Parameter $ldap ein typisiertes LDAP\Connection-Objekt (vorher: eine Ressource vom Typ resource). Das Passwort ist seit PHP 8.2 mit dem Attribut #[SensitiveParameter] markiert, sodass es in Stack-Traces nicht im Klartext erscheint.

Wichtig: LDAP-Verbindungen übertragen Credentials standardmäßig im Klartext. Für Produktionsumgebungen sollte stets LDAPS (ldaps://) oder STARTTLS via ldap_start_tls() verwendet werden, um die Übertragung zu verschlüsseln.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindung, wie sie von ldap_connect() zurückgegeben wird.
$dn ?string null Der Distinguished Name (DN) des Benutzers, z. B. cn=admin,dc=example,dc=com. Wird null übergeben, erfolgt ein anonymer Bind.
$password ?string null Das Passwort des unter dn angegebenen Benutzers. Bei null oder leerem String wird ein anonymer bzw. unauthentifizierter Bind versucht.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Bind erfolgreich war, andernfalls false. Bei ungültigen Credentials oder Verbindungsfehlern wird außerdem eine PHP-Warnung ausgelöst, die mit @ oder einem eigenen Error-Handler unterdrückt werden kann.

Beispiele

Authentifizierter Bind und einfache Suche

<?php
$host = 'ldaps://ldap.example.com';
$dn   = 'cn=admin,dc=example,dc=com';
$pass = 'geheimesPasswort';

$conn = ldap_connect($host);
if (!$conn) {
    die('Verbindung zum LDAP-Server fehlgeschlagen.');
}

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);

if (!@ldap_bind($conn, $dn, $pass)) {
    die('LDAP-Bind fehlgeschlagen: ' . ldap_error($conn));
}

$result = ldap_search($conn, 'ou=users,dc=example,dc=com', '(uid=jdoe)');
$entries = ldap_get_entries($conn, $result);

echo 'Gefundene Einträge: ' . $entries['count'] . PHP_EOL;

ldap_unbind($conn);
Gefundene Einträge: 1

Anonymer Bind für öffentlich zugängliche Verzeichnisse

<?php
$conn = ldap_connect('ldap://public.example.com');
if (!$conn) {
    die('Verbindung fehlgeschlagen.');
}

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);

// Anonymer Bind — kein DN, kein Passwort
if (@ldap_bind($conn)) {
    echo 'Anonymer Bind erfolgreich.' . PHP_EOL;

    $result  = ldap_search($conn, 'dc=example,dc=com', '(objectClass=organizationalUnit)');
    $entries = ldap_get_entries($conn, $result);
    echo 'OUs gefunden: ' . $entries['count'] . PHP_EOL;
} else {
    echo 'Anonymer Bind nicht erlaubt: ' . ldap_error($conn) . PHP_EOL;
}

ldap_unbind($conn);
Anonymer Bind erfolgreich. OUs gefunden: 3

// Wichtig · Fallstricke

Sicherheit: Übergeben Sie niemals ein leeres Passwort bei einem nicht-anonymen Bind. Viele LDAP-Server akzeptieren einen DN mit leerem Passwort als anonymen Bind, was zu einer fälschlich erfolgreichen Authentifizierung führen kann, wenn die Anwendung nur auf true/false prüft.

Verschlüsselung: Verwenden Sie in Produktionsumgebungen immer ldaps:// oder rufen Sie vor dem Bind ldap_start_tls() auf, da Credentials sonst im Klartext übertragen werden.

Protokollversion: Stellen Sie mit ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3) sicher, dass LDAPv3 verwendet wird, da viele moderne Server LDAPv2 nicht mehr unterstützen.

Fehlerbehandlung: Im Fehlerfall gibt ldap_bind() false zurück und löst eine Warnung aus. Nutzen Sie ldap_error() und ldap_errno() für aussagekräftige Fehlermeldungen.