ldap_bind()

Heute bin ich auf ein Verhalten der PHP-Funktion ldap_bind() gestoßen, welches ich so nicht erwartet hätte, obwohl es in der Dokumentation angegeben ist.

bool ldap_bind ( resource link_identifier [, string bind_rdn [, string bind_password]] )

Binds to the LDAP directory with specified RDN and password. Returns TRUE on success or FALSE on failure.

ldap_bind() does a bind operation on the directory. bind_rdn and bind_password are optional. If not specified, anonymous bind is attempted.

Der Interessante Punkt ist hier, dass beim Fehlen von Parametern ein anonymer Bind versucht wird. Hat man nun also eine Webanwendung, die über ein Login-Formular Benutzername und Passwort einsammelt und dann ein Bind gegen ein Microsoft ActiveDirectory versucht, so bekommt man in zwei Fällen ein positives Ergebnis, nämlich bei korrektem Benutzernamen+Passwort und bei fehlendem Passwort. Grund dafür ist, dass das ActiveDirectory anonyme Binds zulässt, zwar kann man dann nicht alle Informationen sehen, aber erfolgreich ist es eben. (Es kann sein, dass es daran liegt, dass das AD noch im MixedMode läuft, für die Kompatibiltät zu pre-2000 Maschinen, vielleicht kann da jemand in den Kommentaren mal Klarheit bringen, Microsoft ist irgendwie nicht so meine Welt.)

Also sollte man unbedingt vorher noch mal eine Prüfung machen, ob überhaupt ein Passwort angegeben wurde, ich habe mich entschieden es folgendermaßen zu machen (unvollständiger code):

if(strlen($password) > 0)