Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Login

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

  • PHP Login

    hallo,

    ich kenne mich nur ganz oberflächlich mit PHP aus. Habe folgendes Problem:

    wir haben ein neues Monitoringprogramm installiert (cacti, vielleicht kennt das ja jemand).

    am anfang kommt immer ein loginscreen auf welchem man das passwort eingeben muss. nun möchte ich einen link erstellen, welcher diese loginseite öffnet und gleich das login und passwort in die beiden input fields schreibt, sodass man nur noch auf login klicken muss. Oder dass sogar gleich der Befehl für den Login mit Passwort gesendet wird, und man sich direkt eingeloggt wieder findet.

    PHP Code der Datei auth_login.php5
    [PHP]/* set default action */
    if (!isset($_REQUEST["action"])) { $_REQUEST["action"] = ""; }

    switch ($_REQUEST["action"]) {
    case 'login':
    /* --- start ldap section --- */
    $ldap_auth = false;
    if ((read_config_option("ldap_enabled") == "on") && ($_POST["realm"] == "ldap") && (strlen($_POST["login_password"])) && (strlen($_POST["login_username"]))){
    $ldap_conn = ldap_connect(read_config_option("ldap_server"));

    if ($ldap_conn) {
    $ldap_dn = str_replace("<username>",$_POST["login_username"],read_config_option("ldap_dn"));
    $ldap_response = @ldap_bind($ldap_conn,$ldap_dn,stripslashes($_POST["login_password"]));

    if ($ldap_response) {
    $ldap_auth = true;
    if (sizeof(db_fetch_assoc("select * from user_auth where username='" . $_POST["login_username"] . "' and realm = 1")) == 0) {
    /* copy template user's settings */
    user_copy(read_config_option("ldap_template"), $_POST["login_username"], 1);
    }
    }
    }
    }
    /* --- end ldap section --- */

    if ($ldap_auth) {
    $user = db_fetch_row("select * from user_auth where username='" . $_POST["login_username"] . "' and realm = 1");
    } else {
    $user = db_fetch_row("select * from user_auth where username='" . $_POST["login_username"] . "' and password = '" . md5($_POST["login_password"]) . "' and realm = 0");
    }

    if (sizeof($user)) {
    /* make entry in the transactions log */
    db_execute("insert into user_log (username,user_id,result,ip,time) values('" . $_POST["login_username"] ."'," . $user["id"] . ",1,'" . $_SERVER["REMOTE_ADDR"] . "',NOW())");

    /* set the php session */
    $_SESSION["sess_user_id"] = $user["id"];

    /* handle "force change password" */
    if ($user["must_change_password"] == "on") {
    $_SESSION["sess_change_password"] = true;
    }

    /* ok, at the point the user has been sucessfully authenticated; so we must
    decide what to do next */
    switch ($user["login_opts"]) {
    case '1': /* referer */
    if (sizeof(db_fetch_assoc("select realm_id from user_auth_realm where realm_id=8 and user_id=" . $_SESSION["sess_user_id"])) == 0) {
    header("Location: graph_view.php5");
    }else{
    header("Location: " . (isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "index.php5"));
    }
    break;
    case '2': /* default console page */
    header("Location: index.php5"); break;
    case '3': /* default graph page */
    header("Location: graph_view.php5"); break;
    }

    exit;
    }else{
    /* --- BAD username/password --- */
    db_execute("insert into user_log (username,user_id,result,ip,time) values('" . $_POST["login_username"] . "',0,0,'" . $_SERVER["REMOTE_ADDR"] . "',NOW())");
    }
    }

    ?>
    <html>
    <head>
    <title>Login to Cacti</title>
    <STYLE TYPE="text/css">
    <!--
    BODY, TABLE, TR, TD {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;}
    A {text-decoration: none;}
    A:active { text-decoration: none;}
    A:hover {text-decoration: underline; color: #333333;}
    A:visited {color: Blue;}
    -->
    </style>
    </head>

    <body bgcolor="#FFFFFF" onload="document.login.login_username.focus()">

    <!-- apparently IIS 5/4 have a bug (Q176113) where setting a cookie and calling the header via
    'Location' does not work. This seems to fix the bug for me at least... -->
    <form name="login" method="post" action="<?php print basename($_SERVER["PHP_SELF"]);?>">

    <table align="center">
    <tr>
    <td colspan="2"><img src="images/auth_login.gif" border="0" alt=""></td>
    </tr>
    <?php
    if ($_REQUEST["action"] == "login") {?>
    <tr height="10"><td></td></tr>
    <tr>
    <td colspan="2"><font color="#FF0000"><strong>Invalid User Name/Password Please Retype:</strong></font></td>
    </tr>
    <?php }?>
    <tr height="10"><td></td></tr>
    <tr>
    <td colspan="2">Please enter your Cacti user name and password below:</td>
    </tr>
    <tr height="10"><td></td></tr>
    <tr>
    <td>User Name:</td>
    <td><input type="text" name="login_username" size="40" style="width: 295px;"></td>
    </tr>
    <tr>
    <td>Password:</td>
    <td><input type="password" name="login_password" size="40" style="width: 295px;"></td>
    </tr>
    <?php
    if (read_config_option("ldap_enabled") == "on") {?>
    <tr>
    <td>Realm:</td>
    <td>
    <select name="realm" style="width: 295px;">
    <option value="local">Local</option>
    <option value="ldap" selected>LDAP</option>
    </select>
    </td>
    </tr>
    <?php }?>
    <tr height="10"><td></td></tr>
    <tr>
    <td><input type="submit" value="Login"></td>
    </tr>
    </table>

    <input type="hidden" name="action" value="login">

    </form>

    </body>
    </html>
    [/PHP]

    Gibt es irgendwie die möglich den Befehl welcher bei klicken auf Login gesendet wird in einen Link zu verfassen oder eben die input fields per link zu "füllen"? oder habt ihr da noch ne andere idee?

    natürlich bin ich nicht nur an der lösung interessiert, sondern auch am "lösungsweg". ich möchte das problem sozusagen nicht nur lösen sondern auch verstehen.

    danke für die hilfe.

    gruss
    ---
    Wer später bremst ist länger schnell.

  • #2
    AW: PHP Login

    Ich löse das immer folgendermassen:

    - Rufe die Login-Seite auf und lasse sie dir im Browser anzeigen.
    - Betrachte jetzt den Quellcode der Seite
    - Was Du brauchst ist der Teil von &lt;form&gt; bis &lt;/form&gt;, kopiere alles und setze das in eine neue html-Datei
    - Beim form-Tag musst du ev. das Attribut action= auf den korrekten Pfad zur auth_login.php5 einstellen, falls du die neue html-Datei in ein anders Verzeichnis stellst.
    - Bei &lt;input type="text" name="login_username" size="40" style="width: 295px;"&gt; setzst du noch das Attribut value="dein Benutzername" rein und bei &lt;input type="text" name="login_password" size="40" style="width: 295px;"&gt; das Attribut value="dein Passwort".
    - jetzt noch dem body-Tag die Action onload=login.submit() geben und es sollte bereits klappen.
    - wenn du willst, kannst du noch alle darstellungstechnischen Sachen aus der neuen html-Datei entfernen (keine input-Tags!), da diese eh nie angezeigt wird (also alle Styles, Tabellen-Aufteilungen, etc. Und dann kannst du auch noch alle input-Felder als hidden definieren, damit vor dem erfolgreichen login gar nichts mehr angezeigt wird.

    Die neue html-Datei könnte dann ungefähr so aussehen:
    [PHP]<html>
    <head>
    </head>
    <body onload=login.submit()>


    <form method="post" action="http://homepage.ch/verzeichnis/auth_login.php5" name="login">
    <input type="hidden" name="blabla" value="blabla">
    <input type="hidden" name="blabla2" value="blabla2">
    <input type="hidden" name="login_username" value="XYZ">
    <input type="hidden" name="login_password" value="XYZ">
    </form>


    </body>
    </html>[/PHP]

    Natürlich könnte man das ganze auch mit PHP lösen. Dazu müsste man den Befehl curl nutzen. Dieses obige Vorgehen empfiehlt sich immer dann, wenn man ein automatisches Login haben will, wo man kein Serverzugriff hat.

    In deinem Fall würde es sicher auch genügen, in der auth_login.php5 die Werte fest einzugeben:

    - Bei &lt;input type="text" name="login_username" size="40" style="width: 295px;"&gt; setzst du noch das Attribut value="dein Benutzername" rein und bei &lt;input type="text" name="login_password" size="40" style="width: 295px;"&gt; das Attribut value="dein Passwort".
    Dieses Posting wurde aus 100% rezyklierten Elektronen hergestellt
    und kann für die Umwelt absolut unschädlich gelöscht werden.

    Kommentar


    • #3
      AW: PHP Login

      sonst kannst du auch Firefox nehmen, die Daten speichern und dann hast du die daten immer schön direkt im feld hinengeschrieben!


      Gruss
      Gruss
      IncSys


      the answer to life, the universe and everything = 42

      Kommentar


      • #4
        AW: PHP Login

        Ja FF oder RoboForm oder was auch immer
        My Workstation: AMD PhenomII X4 Black Edition / Asus M4A79 Deluxe / 8GB Corsair Domiator / ATI Radeo HD6870 / OCZ SSD 256GB / Fatalaty X-FI / Vista Ult. X64

        Kommentar


        • #5
          AW: PHP Login

          nunja. schlussendlich ist der link ja nicht nur für mich sondern für eine gesamte abteilung. und ich möchte ja nicht noch allen den firefox installieren. vorallem arbeiten wir hauptsächlich auf terminalservern und dort kommt uns bestimmt kein firefox drauf.

          danke remix. werde ich gleich mal versuchen.
          ---
          Wer später bremst ist länger schnell.

          Kommentar


          • #6
            AW: PHP Login

            also das mit dem neuen html hat super geklappt. danke für den tipp. kann ich sicherlich auch anderweitig noch verwenden. das einfügen von value auf der originalen php ist mir auch schon in denn sinn gekommen, jedoch für diese anforderung nicht das richtige.

            besten dank nochmals..
            gruss
            ---
            Wer später bremst ist länger schnell.

            Kommentar


            • #7
              AW: PHP Login

              Na toll, super Variante:

              Code:
              [input type="hidden" name="login_username" value="XYZ"] 
              [input type="hidden" name="login_password" value="XYZ"]
              Das ist wohl nicht dein ernst?
              "There is no such thing as a best solution, be it a tool, a language, or an operating system. There can only be systems that are more appropriate in a particular set of circumstances."

              Kommentar


              • #8
                AW: PHP Login

                @pantheros:

                Es geht ja nur darum, dass der Mitarbeiter (wohl in einem Intranet) sich durch Klick auf einen einfachen Link automatisch anmelden kann, ohne jedesmal die Benutzerdaten einzugegen. Und das soll natürlich auch auf mehreren Rechnern funktionieren -> also nichts mit Passwortmanager im Browser. Wenn Du davon ausgehst, dass derjenige, der diesen Link kennt und benutzt auch die Zugangsdaten kennt, ist das absolut kein Sicherheitsproblem. Es soll ja nur eine Vereinfachung des Logins sein und kein Schutzmechanismus, um das Passwort zu verbergen. Was meinst Du, wieviele solcher Dateien ich auf meinem Server in einem Passwortgeschützten Verzeichnis habe, um mich bei den diversesten Web-Diensten anzumelden? Ich logge mich mit einem Passwort auf meinen Server ein, und von dort gelange ich mit Hilfe dieser kleinen html-Geschichten auf jede gewünschte per Web-Formular gesicherte Seite mit einem einzigen Mausklick ohne weitere Tastatureingaben. Schlussendlich macht es doch keinen Unterschied, ob ich die Daten von Hand eingebe oder per JavaScript an das Formular sende. Das Prozedere ist immer das gleiche. Alles klar?
                Zuletzt geändert von remix; 08.03.2007, 16:22.
                Dieses Posting wurde aus 100% rezyklierten Elektronen hergestellt
                und kann für die Umwelt absolut unschädlich gelöscht werden.

                Kommentar


                • #9
                  AW: PHP Login

                  klar ist das mein ernst. und es funktioniert wunderbar.
                  war eine super idee und genau das was ich gesucht habe.

                  genau halt wie remix gesagt hat.
                  ---
                  Wer später bremst ist länger schnell.

                  Kommentar


                  • #10
                    AW: PHP Login

                    BlackShark,

                    Alles deine Sache, mal nebenbei bemerkt, dein Script ist sowieso ein riesen Sicherheitsloch, da kommts auf die hidden-tags so oderso nicht mehr drauf an ;-)
                    "There is no such thing as a best solution, be it a tool, a language, or an operating system. There can only be systems that are more appropriate in a particular set of circumstances."

                    Kommentar


                    • #11
                      AW: PHP Login

                      Pantheros, du verstehst es wohl noch nicht ganz. Das Login wird nur lokal genutzt, und zwar auf Rechnern und bei Leuten, die die Zugangsdaten eh kennen. Es geht um eine vereinfachte lokale Anmeldung. Solange man diese Html-Datei nicht einfach so in's Internet stellt passiert überhaupt nichts!
                      Dieses Posting wurde aus 100% rezyklierten Elektronen hergestellt
                      und kann für die Umwelt absolut unschädlich gelöscht werden.

                      Kommentar


                      • #12
                        AW: PHP Login

                        Hi Remix,

                        Lokal stellt es kein Problem dar. Es ging bei meinem Posting (Nr. 10) auch nicht um die hidden tags, primär. Aber das ist auch jetzt egal. Grundsätzlich sollte man einfach wissen, dass hidden tags nicht für den Anwender bzw. Besucher "versteckt" sind. Das selbe gilt auch bei input type = password. Dass es dir klar ist, remix, ist mir schon bekannt - oder hoffe ich zumindest. Dieses Posting hier, kann als allgemeine Information für Neulinge angesehen werden.

                        Ich bitte darum, dass der Thread geschlossen wird, da die Frage beantwortet wurde und der Threadstarter (laut Posting Nr. 9) das Problem gelöst hat.

                        Danke. Bye
                        "There is no such thing as a best solution, be it a tool, a language, or an operating system. There can only be systems that are more appropriate in a particular set of circumstances."

                        Kommentar

                        Lädt...
                        X