Ankündigung

Einklappen
Keine Ankündigung bisher.

Benutzeridentifizierung auf einem ldap Server prüfen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Benutzeridentifizierung auf einem ldap Server prüfen

    Wie kann ich prüfen, ob sich der Benutzer mit dem richtigen Benutzernamen und Passwort bei einem ldap Verzeichnis anmeldet.
    Ich habe folgendes versucht:

    PHP-Code:
    $dn ldap_connect("ldap-server") or die("Could not connect to ldap");
    ldap_set_option($dnLDAP_OPT_PROTOCOL_VERSION3);
    $user=$_POST["user"];
    $passwd=$_POST["passwd"];
    $binddn $user "@firma.intern";
    $ldapbind = @ldap_bind($dn$binddn$passwd) or die($badinfo);

    if (
    $ldapbind == true) { echo "super"; } else { echo "leider nein"; }

    Bei diesem Code ist es bei mir völlig egal welchen Benutzername oder Passwort ich angebe. Ich erhalte immer als Ergebnis super.
    Hoffe es kann mir hier jemand weiterhelfen.
    Vielen Dank


  • #2
    Na dann ev. mal den Fehlerunterdrückungsoperator @ entfernen und die Rückgabe auswerten.

    Ausserdem: Typunsicherer Vergleich == .. da kann sowas schonmal passieren, daher sollte man das auch genau nicht so machen.

    MOD: Verschoben fon PHP-Fortgeschritten
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Vielen Dank für die Antwort.
      Leider sehe ich den Fehler nicht.
      Ich habe die Zeile auf
      $ldapbind = ldap_bind($dn, $binddn, $passwd) or die($badinfo); geändert und erhalte immer 1 als Ergebnis.Oder ist da etwas anderes mit Fehlerunterdrückungsoperator gemeint?
      Wo liegt der Fehler bei Typunsicherer Vergleich ==. Ich habe auch === versucht mit dem selben Ergebnis?
      Vielleicht kannst du mir einen Lösungsvorschlag posten, oder muss ich eine ldap Funktion für die Loginprüfung nehmen.
      Vielen Dank nochmals

      Kommentar


      • #4
        Zitat von haiflosse Beitrag anzeigen
        Oder ist da etwas anderes mit Fehlerunterdrückungsoperator gemeint?
        PHP-Code:

        Mal mit dem Beispiel aus der Docu versuchen ?
        http://php.net/manual/de/function.ldap-bind.php


        Kommentar


        • #5
          ldap_bind() liefert TRUE oder FALSE als Rückgabewert, aber sicher nicht 1.

          Kann es sein, dass du dir die Ausgabe mittels echo anschaust? echo eignet sich für sowas nicht. Hier solltest du var_dump() oder besser noch einen Debugger verwenden.

          Kommentar


          • #6
            Hallo!
            Danke für die Antworten.
            Ich habe jetzt die Ursache gefunden.

            Wenn ich die Variablen user und passwd direkt zuweise funktioniert alles, wenn ich aber die Daten über ein Formular senden möchte bekomme ich immer true als Ergebnis.

            Hier mein Code von meinem Formular
            HTML-Code:
            <form name="ldaplogin" enctype="text/plain" method="post" action="<?php $_SERVER['PHP_SELF']; ?>" >
                <input type="hidden" name="login" value="1" />
                user: <input type="text" name="user" />
                passwd: <input type="password" name="passwd" />
                <input type="submit" value="ok" />
            
            </form>
            Was mache ich da falsch.
            Danke nochmals

            Kommentar


            • #7
              Das hier:

              HTML-Code:
              enctype="text/plain"
              führt hierzu:

              PHP-Code:
              ldap_bind($dn'@firma.intern''')); 
              Und das gibt true zurück. Warum?
              https://stackoverflow.com/questions/...blank-password
              sorry, shift-taste kaputt

              Kommentar


              • #8
                Danke für die Antwort.
                Ich habe es jetzt mit dem Beispielcode und meinem Formular versucht mit allen Varianten von enctype und auch ohne enctype. Leider bekomme ich immer ein true.
                Hier das Beispiel:

                PHP-Code:
                <?php
                if ($_POST["login"]==1) {
                // verwenden von ldap bind
                $ldaprdn  $_POST["user"];     // ldap rdn oder dn
                $ldappass $_POST["passwd"]; // entsprechendes password

                // verbinden zum ldap server
                $ldapconn ldap_connect(l"ldap-server")
                    or die(
                "Keine Verbindung zum LDAP server möglich.");

                    if (
                $ldapconn) {

                        
                // binden zum ldap server
                        
                $ldapbind ldap_bind($ldapconn$ldaprdn$ldappass);

                        
                // Bindung überpfrüfen
                        
                if ($ldapbind) {
                            echo 
                "LDAP bind erfolgreich...";
                        } else {
                            echo 
                "LDAP bind fehlgeschlagen...";
                        }

                    }
                }
                ?>

                <form name="ldaplogin" method="post" action="<?php $_SERVER['PHP_SELF']; ?>" >
                    <input type="hidden" name="login" value="1" />
                    user: <input type="text" name="user" />
                    passwd: <input type="password" name="passwd" />
                    <input type="submit" value="ok" />

                </form>
                Hoffe es hat noch jemand eine Idee.
                Danke

                Kommentar


                • #9
                  Ja, wenn du nichts eingibst bekommst du ein true, weil siehe oben.
                  Außerdem ist hier ein "l" zu viel:

                  PHP-Code:
                  ldap_connect(l"ldap-server"
                  Und du musst die Domäne wieder an den Usernamen hängen:

                  PHP-Code:
                  $binddn $user "@firma.intern"
                  sorry, shift-taste kaputt

                  Kommentar


                  • #10
                    Danke für die Antwort.
                    Alles klar, hat nun funktioniert.
                    D.h. ich muss immer einen Wert für das Kennwort vorgeben!

                    Gibt es da evtl. auch eine bessere Lösung?
                    Soweit ich den Text verstanden habe sollte man eine anonyme LDAP Authentifizierung deaktivieren oder eine LDAPv3-Spezifikationen verwenden - oder?

                    Danke

                    Kommentar


                    • #11
                      Anonym kannst du eh nur die rootDSE durchsuchen - Guckst du:
                      https://docs.microsoft.com/en-us/pre...nymous-queries

                      Ich würde das einfach direkt im PHP Script abfangen und nicht im AD "rumfuschen"
                      sorry, shift-taste kaputt

                      Kommentar

                      Lädt...
                      X