Signatur
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
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);
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);
// 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.