schmichl: Passwort in externer Datei

Hi Leute!

Ich habe vor einigen Tagen mit eurer Hilfe folgendes Login Script erstellt (und etwas angepasst).
Also erstmal das Forumlar:

<form action="login.php" method="post" name="Loginformular">
Passwort eingeben:
<input name="passwort" size="10" type="password">
<input name="login" type="submit" value="Login">
</form>

Und die Seite login.php:

<?php

$Adminpasswort=fopen('passwort.txt','r');

$inputpassword=$_POST['passwort'];
$inputpassword="md5($inputpass)";

if(!$passwort) {echo "Bitte geben Sie ein Passwort ein!";}
if(isset($_POST['login']) && $inputpassword == $Adminpasswort){
  session_start();
  $_SESSION['SESSION_Passwort'] == $inputpass;
  fclose ($Adminpasswort);
}

?>
<html>
<head>
 <title>Administrations Login</title>
</head>
<body>

<?php

if($_SESSION['SESSION_Passwort'] == $Adminpasswort)
{
header("Location: admin.php");
}
else
{
 echo "Das von Ihnen eingegebene Passwort ist falsch!";
}

?>

</body>
</html>

In der Datei passwort.txt steht das mit md5 verschlüsselte Wort admin. Und wenn ich jetzt beim Forumlar admin eingebe, schreibt mir das Script, das Passwort sei falsch!
Was habe ich für Fehler gemacht?

Noch zur Erklärung:
Das Passwort habe ich in einer seperaten txt Datei, damit ich es über ein anderes Script ändern kann, was hervoragend funktioniert.
Den Session Login habe ich deswegen eingesetzt, damit man andere Seiten schützen kann!

MfG,
schmichl

  1. Moin schmichl,

    In der Datei passwort.txt steht das mit md5 verschlüsselte Wort admin. Und wenn ich jetzt beim Forumlar admin eingebe, schreibt mir das Script, das Passwort sei falsch!
    Was habe ich für Fehler gemacht?

    das passwort lässt sich mit md5 nicht entschlüßeln ( nur mit etwas Glück )

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
    1. Moin Mike!

      Ich will das Passwort ja nicht entschlüsseln, ich habe es nur verschlüsselt, damit man es nicht einfach so herausfinden kann, wenn man die passwort.txt Datei öffnet.

      Wenn man das Passwort eingibt, soll die eingabe (mit der variable $inputpass) auch verschlüsselt und verglichen werden.

      MfG,
      schmichl

      1. Moin schmichel,

        Ich will das Passwort ja nicht entschlüsseln, ich habe es nur verschlüsselt, damit man es nicht einfach so herausfinden kann, wenn man die passwort.txt Datei öffnet.

        Wenn man das Passwort eingibt, soll die eingabe (mit der variable $inputpass) auch verschlüsselt und verglichen werden.

        das hier "$inputpassword="md5($inputpass)";
        ergibt nicht das gleiche, wie es in deiner Datei steht.

        Da es sich hier nur um ein PW handelt, kannst du das im Klartext in PHP abfragen, da man den PHP Code nicht lesen kann.

        if( $Passwort == 'Hexe' )
          true
        else
          false

        Gruß
        Mike

        --
        Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
  2. Hallo schmichl,

    $Adminpasswort=fopen('passwort.txt','r');
    $inputpassword="md5($inputpass)";

    $inputpassword == $Adminpasswort
    $_SESSION['SESSION_Passwort'] == $Adminpasswort

    Dir ist klar, was du hier vergleichst? Vielleicht magst du lieber file_get_contents()?

    header("Location: admin.php");

    header("Location: ") erwartet eine absolute URL.

    Dir ist weiter auch klar, dass $_SESSION nicht belegt ist wenn du nicht vorher session_start() aufgerufen hast?

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. $Adminpasswort=fopen('passwort.txt','r');
      $inputpassword="md5($inputpass)";

      $inputpassword == $Adminpasswort
      $_SESSION['SESSION_Passwort'] == $Adminpasswort
      Dir ist klar, was du hier vergleichst? Vielleicht magst du lieber file_get_contents()?

      Kannst du das bitte genauer erklären?

      Dir ist weiter auch klar, dass $_SESSION nicht belegt ist wenn du nicht vorher session_start() aufgerufen hast?

      Ich hab $_SESSION ja nicht vorher aufgerufen, oder doch?

      MfG

      1. Hallo schmichl,

        $Adminpasswort=fopen('passwort.txt','r');

        Hier weist du $Adminpasswort ein FileHandle zu,

        $inputpassword="md5($inputpass)";

        $inputpassword einen String.

        $inputpassword == $Adminpasswort
        $_SESSION['SESSION_Passwort'] == $Adminpasswort

        hier vergleichst du jeweils einen String mit einem FileHandle - Es sollte dir klar sein, dass diese nie das gleiche sind.
        Du möchtest sicher zuvor den Inhalt der Textdatei auslesen, beispielsweise mit fread(). Da ich aber annehme, dass in der Textdatei nur eine Zeile, jenes Passwort, steht, emfahl ich dir, einen Blick auf file_get_contents() zu werfen (http://php3.de/file_get_contens), ggf. brauchst du auch noch trim().
        Warum schreibst du das Passwort eigentlich in eine Textdatei und nicht in das PHP-Script mit hinein ($Adminpasswort = 'irgendwas';)? an die Source wird idR niemand kommen, somit ist es dort sicherer. Du kannst dir natürlich auch eine Konfigurationsdatei à la:
        <?php
          $Adminpasswort = 'irgendwas';
          /* sonstige Konfig-Einstellungen */
        ?>
        bauen und diese dann am Anfang deines Scriptes includen. Riefe man sie direkt auf, so bekäme man natürlich nichts ausgegeben.

        Ich hab $_SESSION ja nicht vorher aufgerufen, oder doch?

        Schau nochmal in dein Script:
        Wenn (isset($_POST['login']) && $inputpassword == $Adminpasswort) FALSE wird, dann hast du keine Session gestartet.

        Grüße
          David

        --
        >>Nobody will ever need more than 640k RAM!<<
        1981 Bill Gates
        1. Hi David!

          Warum schreibst du das Passwort eigentlich in eine Textdatei und nicht in das PHP-Script mit hinein ($Adminpasswort = 'irgendwas';)? an die Source wird idR niemand kommen, somit ist es dort sicherer. Du kannst dir natürlich auch eine Konfigurationsdatei à la:
          <?php
            $Adminpasswort = 'irgendwas';
            /* sonstige Konfig-Einstellungen */
          ?>
          bauen und diese dann am Anfang deines Scriptes includen. Riefe man sie direkt auf, so bekäme man natürlich nichts ausgegeben.

          Das kann ich leider nicht, weil ein Script habe, mit dem man das Passwort in der Textdatei ändern kann:

          <?php  ### setup.php ###

          $dateiname = "passwort.txt";
          $errormsg = "";

          if ($_POST['sent'] == 1)  ## Es liegt ein Post aus dem Form vor
          {
            if (!isset($_POST['oldpw']) or !(strlen(trim($_POST['oldpw'])) > 0))
            {
              $errormsg = "Bitte geben Sie Ihr altes Passwort ein!<br>";
            }
            elseif (!isset($_POST['newpw']) or !(strlen(trim($_POST['newpw']))>0))
            {
              $errormsg .= "Bitte geben Sie ein neues Passwort ein!<br>";
            }
            elseif (!$handle = fopen($dateiname, "r+"))
            {
              $errormsg .= "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es sp&auml;ter nochmals!";
            }
            elseif (!$oldpw = fread($handle,filesize($dateiname)))
            {
              $errormsg .= "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es sp&auml;ter nochmals!";
            }
            elseif (trim($oldpw) != trim(md5($_POST['oldpw'])))
            {
              $errormsg .= "Ihr altes Passwort ist falsch!<br>";
            }
            elseif (0!=fseek($handle,0,SEEK_SET)) ## achtung ungewöhnlicher Rückgabewert
            {
              $errormsg .= "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es sp&auml;ter nochmals!";
            }
            elseif (!fwrite($handle, trim(md5($_POST['newpw']))))
            {
              $errormsg .= "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es sp&auml;ter nochmals!";
            }
            elseif (!fclose($handle))
            {
              echo "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es sp&auml;ter nochmals!";
            }
            else
            {
              $errormsg = "Das Passwort wurde erfolgreich ge&auml;ndert<br>";
            }
          }
          echo "<p style="color:red; font-weight:bold;">$errormsg</p>";
          ?>
          <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
                   <input type="hidden" name="sent" value="1"></input>
                   Altes Passwort:&nbsp;<input type="password" name="oldpw" size="15"></input><p>
                   Neues Passwort:&nbsp;<input type="text" name="newpw" size="15" value="<?php echo "$newpw"; ?>"></input><p>
                   <input type="submit" name="submit" value="OK"></input></form>

          Ursprünglich war es auch so, dass das Passwort nicht in einer Datei war, sondern in einer Variable. Aber ich will das Passwort online ändern können!

          --
          MfG,
          schmichl
        2. Ich hab es auch mit fgets() versucht, aber hat auch nicht funktioniert!
          HILFE
          HILFE
          HILFE

          1. Hallo schmichl,

            aber hat auch nicht funktioniert!

            Kannst du das auch präzisieren?

            Grüße
              David

            --
            >>Nobody will ever need more than 640k RAM!<<
            1981 Bill Gates
            1. Hi David!
              Ich bin auch nicht reingekommen, obwohl ich mit fgets die Passwortvariable mit echo ausgegeben habe und das funktioniert hat!
              MfG,
              schmichl

              1. Hi,

                Ich bin auch nicht reingekommen, obwohl ich mit fgets die Passwortvariable mit echo ausgegeben habe und das funktioniert hat!

                Zeilenumbruch? Whitespace?

                cu,
                Andreas

                --
                MudGuard? Siehe http://www.Mud-Guard.de/
                Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                1. Nein,nichts, keine Fehler!

                  1. Ich habe das Script jetzt ein bisschen geändert, es müsste eigentlich gehen, aber das tut es nicht:

                    <?php

                    $handle=fopen('passwort.txt','r');
                    $Adminpasswort= fgets($handle, 100);
                    $Adminpasswort= trim($Adminpasswort);
                    fclose($handle);

                    if(!inputpass) {echo "Bitte geben Sie ein Passwort ein!<br>";}
                    if(isset($_POST['login']) && isset($_POST['Passwort']) && md5($_POST['Passwort']) == $Adminpasswort){
                      session_start();
                      $_SESSION['SESSION_Passwort'] == md5($_POST['Passwort']);
                    }
                    else {echo "Es trat ein Fehler auf!<br>"; session_unregister("SESSION_Passwort");}

                    ?>

                    <html>
                    <head>
                     <title>Administrations Login</title>

                    </head>
                    <body>

                    <?php

                    if($_SESSION['SESSION_Passwort'] == md5($_POST['Passwort']))
                    {
                    header("Location: admin.php");
                    }
                    else
                    {
                     echo"Das von Ihnen eingegebene Passwort ist falsch, bitte &uuml;berpr&uuml;fen Sie die Eingabe noch einmal.";
                    }

                    ?>

                    HILFE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    Ich bin am verzweifeln!!!
                    MfG,
                    schmichl

                    1. Hello,

                      if(!inputpass) {echo "Bitte geben Sie ein Passwort ein!<br>";}

                      Ich bin am verzweifeln!!!

                      Schau Dir die Zeile mal genau an. Woher kommt die Konstante?

                      Harzliche Grüße aus http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
                      1. hello!
                        Hab ich schon lange gesehen, geht trotzdem nicht!

                        Vielleicht geht es ja, wenn ich einen session_save_path angebe!

                        Hilf mir bitte!!!

                      2. Ich glaube, ich weiß wo der Fehler liegt:

                        <?php

                        $handle=fopen('passwort.txt','r');
                        $Adminpasswort= fgets($handle, 100);
                        $Adminpasswort= trim($Adminpasswort);
                        fclose($handle);

                        $inputpass=$_POST['Passwort'];
                        md5($inputpass);
                        trim($inputpass);

                        if(!$inputpass) {echo "Bitte geben Sie ein Passwort ein!<br>";}
                        if(isset($_POST['login']) && isset($_POST['Passwort']) && $inputpass == $Adminpasswort)
                        {
                        session_start();
                        $_SESSION['SESSION_Passwort'] == $inputpass;
                        }
                        else {echo "Es trat ein Fehler auf!<br>"; session_unregister("SESSION_Passwort");}

                        ?>

                        <html>
                        <head>
                         <title>Administrations Login</title>
                         <link rel="stylesheet" type="text/css" href="../style.css">
                        </head>
                        <body bgcolor="#F3F3F3">

                        <?php
                        echo $inputpass;
                        if($_SESSION['SESSION_Passwort'] == $inputpass)
                        {
                        header("Location: admin.php");
                        }
                        else
                        {
                         echo"<img src="images/error.gif" align="absmiddle">&nbsp;&nbsp;Das von Ihnen eingegebene Passwort ist falsch, bitte &uuml;berpr&uuml;fen Sie die Eingabe <a href="javascript:history.back()">noch einmal</a>.";
                        }

                        ?>

                        Die $inputpass Variable lässt sich nicht ausgeben!
                        Warum?

                        --
                        MfG,
                        schmichl
                        1. Hi,

                          <?php

                          $handle=fopen('passwort.txt','r');
                          $Adminpasswort= fgets($handle, 100);
                          $Adminpasswort= trim($Adminpasswort);
                          fclose($handle);

                          echo '###'.$Adminpasswort.'###<br>';

                          $inputpass=$_POST['Passwort'];

                          echo '###'.$inputpass.'###<br>';

                          md5($inputpass);

                          echo '###'.$inputpass.'###<br>';

                          trim($inputpass);

                          echo '###'.$inputpass.'###<br>';

                          (ich würd ja erst trim machen, dann verschlüsseln - und vor allem die Ergebnisse der beiden Operationen nicht wegwerfen).

                          cu,
                          Andreas

                          --
                          MudGuard? Siehe http://www.Mud-Guard.de/
                          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                          1. Hi!
                            Danke für deinen Post!
                            Wofür die #-Zeichen?
                            $Adminpasswort kann ich ausgeben, $inputpass aber nicht!

                            MfG,
                            schmichl

                            1. Hi,

                              Wofür die #-Zeichen?

                              Um whitespace zu erkennen.

                              $Adminpasswort kann ich ausgeben, $inputpass aber nicht!

                              Das heißt was? Fehlermeldung? Leere Ausgabe?

                              cu,
                              Andreas

                              --
                              MudGuard? Siehe http://www.Mud-Guard.de/
                              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                              1. leere Ausgabe!!!

                                1. Hi,

                                  leere Ausgabe!!!

                                  Heißt Dein Paßwortfeld überhaupt so wie Du vermutest?

                                  cu,
                                  Andreas

                                  --
                                  MudGuard? Siehe http://www.Mud-Guard.de/
                                  Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                                  1. Ja, es heißt Passwort!
                                    Und hier wieder einmal das veränderte Script:
                                    Mittlerweile kann ich das eingegebene Passwort ausgeben, es kommt das verschlüsselte (also das geht) und $Adminpasswort kann ich auch ausgeben!

                                    Die Datei login.php:
                                    <?php

                                    $handle=fopen('passwort.txt','r');
                                    $Adminpasswort= fgets($handle, 100);
                                    $Adminpasswort= trim($Adminpasswort);
                                    fclose($handle);

                                    $Passwort=trim($Passwort);
                                    $Passwort=md5($Passwort);
                                    echo "Das eingegebene $Passwort ";
                                    if(!$Passwort) {echo "Bitte geben Sie ein Passwort ein!<br>";}
                                    if($Passwort == $Adminpasswort)
                                    {
                                    session_save_path("./sessions");
                                    session_start();
                                    $_SESSION['SESSION_Passwort'] == $Passwort;
                                    }
                                    else {echo "Es trat ein Fehler auf!<br>"; session_unregister("SESSION_Passwort");}

                                    ?>

                                    <html>
                                    <head>
                                     <title>Administrations Login</title>
                                    </head>
                                    <body>

                                    <?php

                                    if($_SESSION['SESSION_Passwort'] == $Passwort)
                                    {
                                    header("Location: admin.php");
                                    }
                                    else
                                    {
                                     echo"Das von Ihnen eingegebene Passwort ist falsch, bitte &uuml;berpr&uuml;fen Sie die Eingabe noch einmal.<br>";
                                     session_unregister("SESSION_Passwort");
                                    }

                                    ?>

                                    </body>
                                    </html>

                                    Das Formular:

                                    <form action="login.php" method="post" name="Loginformular">
                                    Passwort eingeben:
                                    <input name="Passwort" size="10" type="password">
                                    <input name="login" type="submit" value="Login">
                                    </form>

                                    Und die Passwort.txt:
                                    21232f297a57a5a743894a0e4a801fc3
                                    Also das mit md5 verschlüsselte Wort admin!

                                    Es geht trotzdem noch immer nicht, ich bekomme folgende Error-Meldungen:

                                    Warning: session_start(): open(./sessions/sess_bc8c5b431382825de9484939a1bc29a5, O_RDWR) failed: Permission denied (13) in /home/htdocs/web126/html/miniCMS2/admin/login.php on line 19

                                    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/htdocs/web126/html/miniCMS2/admin/login.php:14) in /home/htdocs/web126/html/miniCMS2/admin/login.php on line 19

                                    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/htdocs/web126/html/miniCMS2/admin/login.php:14) in /home/htdocs/web126/html/miniCMS2/admin/login.php on line 19

                                    Das von Ihnen eingegebene Passwort ist falsch, bitte überprüfen Sie die Eingabe noch einmal.

                                    Warning: Unknown(): open(./sessions/sess_bc8c5b431382825de9484939a1bc29a5, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

                                    Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (./sessions) in Unknown on line 0

                                    SOS!!!!

                        2. Hi,

                          Ich glaube, ich weiß wo der Fehler liegt:

                          Aus Deinem Ersten Posting:

                          <input name="passwort" size="10" type="password">

                          Aus Deinem Posting von grade eben:

                          $inputpass=$_POST['Passwort'];

                          Zur Verdeutlichung nochmal direkt untereinander:

                          <input name="passwort" size="10" type="password">
                          $inputpass=$_POST['Passwort'];

                          ^
                                                |
                          Fällt Dir was auf? ---+

                          cu,
                          Andreas

                          --
                          MudGuard? Siehe http://www.Mud-Guard.de/
                          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                          1. Hi!

                            Fällt Dir was auf?

                            Das ist mir schon aufgefallen, aber es hat auch so nicht funktioniert!
                            Ich hab auch schon die aktuelle version des Script gepostet, da dürften keine Fehler sein, ich kann auch die Variablen ausgeben, aber es geht trotzdem nicht!

                            Trotzdem Danke!

                            MfG,
                            schmichl

  3. Moin schichl,

    leider ist dein Script voller Fehler:

    <?php

    $Adminpasswort=fopen('passwort.txt','r');

    $Adminpasswort ist nun ein Filehandle, kein String.

    $inputpassword=$_POST['passwort'];
    $inputpassword="md5($inputpass)";

    Was nu? ist $inputpassword=$_POST['passwort']; oder ist es $inputpassword="md5($inputpass)";?

    if(!$passwort) {echo "Bitte geben Sie ein Passwort ein!";}
    if(isset($_POST['login']) && $inputpassword == $Adminpasswort){
      session_start();

    session_start(); MUSS als aller erstes in deiner PHP Datei stehen.

    <html>
    <head>
     <title>Administrations Login</title>
    </head>
    <body>

    <?php

    if($_SESSION['SESSION_Passwort'] == $Adminpasswort)
    {
    header("Location: admin.php");

    einen header kann man nur schicken, wenn noch null komma null HTM Ausgabe erfolgt ist.

    Das ist nur ein kleiner Auszug deiner Fehler :-( Es gibt noch reichlich davon. Sorry

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
  4. Moin nochmal,

    ich kann das gar nicht mit ansehen. Nimm das hier und passe es an:
    Allerdings fehlt hier das Style Sheet.
    <?
    @session_start();

    $falt=0;
    $Das_Passwort='Hexe';

    $online = $_SESSION['Online'];

    if ( isset ($_POST['Password']) )
       {
         $Check_PW=$_POST['Password'];

    if ( $Das_Passwort != $Check_PW )
     {
       $falt=1;
     }
         else
     {
       $online='YEP';
              $_SESSION['Online']="YEP";
     }
       }

    echo '
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>

    <title>Admin Bereich</title>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    </head>

    <body>

    echo '

    <p id="TextNormal"><span>Admin Bereich</span></p>';

    if ( $online != 'YEP' )
       {
     echo '
     <br><br><br>
     <p id="TextNormal"><span>Bitte das Passwort eingeben:</span></p>

    <form name="login_form" action="admin.php" method="POST" target="_self">
     <input maxlength="40" type="password" name="Password">
     <br><br>
     <input type="submit" name="button" value="Senden">
     </form>';

    if ( $falt == 1 )
        {
      echo '
      <p id="TextNormal" style="COLOR:#FF0000;"><span>
      Ung&uuml;ltiges Passwort!
      </span></p>';
        }
       }
    else
       {

    echo '
            HIER DEINE ADMINPAGE';
       }

    echo '

    </body>
    </html>';
    ?>

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."