Passwort in externer Datei
schmichl
- php
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
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
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
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
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
$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
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
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äter nochmals!";
}
elseif (!$oldpw = fread($handle,filesize($dateiname)))
{
$errormsg .= "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es spä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äter nochmals!";
}
elseif (!fwrite($handle, trim(md5($_POST['newpw']))))
{
$errormsg .= "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es später nochmals!";
}
elseif (!fclose($handle))
{
echo "Dateiproblem mit $dateiname!<br>Bitte versuchen Sie es später nochmals!";
}
else
{
$errormsg = "Das Passwort wurde erfolgreich geä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: <input type="password" name="oldpw" size="15"></input><p>
Neues Passwort: <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!
Ich hab es auch mit fgets() versucht, aber hat auch nicht funktioniert!
HILFE
HILFE
HILFE
Hallo schmichl,
aber hat auch nicht funktioniert!
Kannst du das auch präzisieren?
Grüße
David
Hi David!
Ich bin auch nicht reingekommen, obwohl ich mit fgets die Passwortvariable mit echo ausgegeben habe und das funktioniert hat!
MfG,
schmichl
Hi,
Ich bin auch nicht reingekommen, obwohl ich mit fgets die Passwortvariable mit echo ausgegeben habe und das funktioniert hat!
Zeilenumbruch? Whitespace?
cu,
Andreas
Nein,nichts, keine Fehler!
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 überprüfen Sie die Eingabe noch einmal.";
}
?>
HILFE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ich bin am verzweifeln!!!
MfG,
schmichl
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
hello!
Hab ich schon lange gesehen, geht trotzdem nicht!
Vielleicht geht es ja, wenn ich einen session_save_path angebe!
Hilf mir bitte!!!
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"> Das von Ihnen eingegebene Passwort ist falsch, bitte überprüfen Sie die Eingabe <a href="javascript:history.back()">noch einmal</a>.";
}
?>
Die $inputpass Variable lässt sich nicht ausgeben!
Warum?
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
Hi!
Danke für deinen Post!
Wofür die #-Zeichen?
$Adminpasswort kann ich ausgeben, $inputpass aber nicht!
MfG,
schmichl
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
leere Ausgabe!!!
Hi,
leere Ausgabe!!!
Heißt Dein Paßwortfeld überhaupt so wie Du vermutest?
cu,
Andreas
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 überprü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!!!!
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
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
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
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ültiges Passwort!
</span></p>';
}
}
else
{
echo '
HIER DEINE ADMINPAGE';
}
echo '
</body>
</html>';
?>
Gruß
Mike