warum prüft der mein passwort nicht?
ronny
- php
hallo, folgendes script nutze ich für einen login
<?PHP
session_start();
$usr = $eingabe_name;
$pass = $eingabe_pass;
$md_pass = md5($pass);
require("db.php");
$SQL = "SELECT usr_name FROM Einloggen WHERE usr_name = '$usr' and passwort = '$md_pass'";
$abfrage = mysql_query($SQL);
if(mysql_num_rows($abfrage) == 1) {
//benutzername erhalten
$_SESSION["txt_usr"] = $txt_usr;
//login ermöglichen
$login = 1;
$_SESSION["login"] = $login;
} else {
//platz für evtl. verarbeitungen
}
mysql_close();
?>
zum überprüfen intern nutze ich das dann so
<?php
session_start();
if (!isset($_SESSION['login'])) {
// Variable nicht registriert
session_destroy();
@header("Location:index.php");
exit;
}
?>
aber warum kann ich mich mit einem x-beliebigen passwort einloggen?
die abfrage sollte doch stimmen?
oder?
danke
ronny
Hello,
mir scheint des Rätsels Lösung ganz woanders zu stecken...
Hast Du Deinen Browser auf "redselig" eingestellt. Zum Testen derartiger Scripte ist das unumgänglich.
Grüße
Tom
hi,
Hast Du Deinen Browser auf "redselig" eingestellt. Zum Testen derartiger Scripte ist das unumgänglich.
nee, habe ich nicht, da ich generell ohne kekse arbeiten möchte. und da sessions und kekse noch neuland für mich sind, habe ich mal alles dicht gemacht, damit auch wirklich ohne kekse alles funktioniert.
wie sollte ich denn nun vorgehen?
danke
ronny
hi,
das ist auch nicht die lösung :(
ronny
Hello,
Hast Du Deinen Browser auf "redselig" eingestellt. Zum Testen derartiger Scripte ist das unumgänglich.
nee, habe ich nicht, da ich generell ohne kekse arbeiten möchte. und da sessions und kekse noch neuland für mich sind, habe ich mal alles dicht gemacht, damit auch wirklich ohne kekse alles funktioniert.
Das hoab i mi denkt...
Also: "Cookies annehmen nach Rückfrage" einschalten, beide Arten.
In der PHP-Ini nachschauen, wie die Session-Einstellungen sind und der Einfahheit halber hier posten.
Beim Testen daran denken, dass Cookies erhalten bleiben können und Credentials (Auth401 -> User:Password) immer bis zum Schließen állere Browserintanzen überleben (können).
Also öfter mal Browser schließen.
Dann während der Testphase immer Session-ID im Script anzeigen lassen
echo "Session-ID: ".session_id()."<br />;
echo "Neue Session unter: ".SID."<br />";
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
Das sollte Dir Aufschluss geben.
Viel Erfolg
Tom
hi,
Beim Testen daran denken, dass Cookies erhalten bleiben können und Credentials (Auth401 -> User:Password) immer bis zum Schließen állere Browserintanzen überleben (können).
na das ist ja mein problem, ich komme quasi auch ohne passwort rein ( 1.fehler )
d.h. der interne bereich wird angezeigt, dort werden zwar keine daten angezeigt, aber eigentlich sollte es ja schwupps wieder auf die index gehen ( siehe login prüfen )
und dann komme ich mit jedem pw rein
name: ronny
pw: soeinmüll
so stehts aber in der db
name: ronny
pw: ronny
Also öfter mal Browser schließen.
mach ich bei jedem test neu ;)
echo "Session-ID: ".session_id()."<br />;
echo "Neue Session unter: ".SID."<br />";echo "<pre>";
print_r($_SESSION);
echo "</pre>";
session funktionieren. alles da, alles gleich, wenn name falsch, dann gibts auch keine session :(
ich werd noch blöd....
danke
ronny
hi,
echo "Session-ID: ".session_id()."<br />;
echo "Neue Session unter: ".SID."<br />";echo "<pre>";
print_r($_SESSION);
echo "</pre>";
so, das sagt er mir
Session-ID: 33fc8d58e8fa148b70dacfe4068c1cbf
Neue Session unter:
Array
(
[session_id] => 33fc8d58e8fa148b70dacfe4068c1cbf
[login] => 1
[nochandererkram]
)
sollte also funzen..
ronny
Hello,
so, das sagt er mir
Session-ID: 33fc8d58e8fa148b70dacfe4068c1cbf
Neue Session unter:Array
(
[session_id] => 33fc8d58e8fa148b70dacfe4068c1cbf
[login] => 1
[nochandererkram])
Fein, und wenn Du die Session nun zerstörst mit session_destroy(), dann hat Dein Client ja immer noch den Cookie von der Session (wenn Du mit Cookies arbeitest). Die Session wird dann ggf. unter der selben Nummer wieder aufgemacht beim nächsten Click, aber die Variablen müssten weg sein.
Ich hatte hier mal ein paar Session-Testscripte reingestellt. Must Du mal im Archiv unter "Session" "Test" "Script" "Tom" suchen. Und Sven hatte noch was dazu geschrieben Da müssten die Zusammenhänge dann klar werden.
Aber ich denke, Dein Fehler steckt in der merkwürdigen Logik mit der DB-Abfrage. Der md5()-Wert von einem Leeren Feld ist wohl immer der gleiche. Und wenn Du den in die DB eingetragen hast, dann steht da ein Datensatz mit Username = "" und Passwort = md5("") drin.
Und wenn Du nun noch
die $_POST ausgeben lässt, genauso wie Du es mit den $_SESSION jetzt gemacht hast, geht Dir vielleicht ein Licht auf. Ist nur 'ne Idee...
Grüße
Tom
hi,
Fein, und wenn Du die Session nun zerstörst mit session_destroy(), dann hat Dein Client ja immer noch den Cookie von der Session (wenn Du mit Cookies arbeitest). Die Session wird dann ggf. unter der selben Nummer wieder aufgemacht beim nächsten Click, aber die Variablen müssten weg sein.
stimmt, variablen sind weg, aber auch neue session.
Ich hatte hier mal ein paar Session-Testscripte reingestellt. Must Du mal im Archiv unter "Session" "Test" "Script" "Tom" suchen.
*im archiv wühl* ;)
Aber ich denke, Dein Fehler steckt in der merkwürdigen Logik mit der DB-Abfrage.
wie meinst du das genau?
Der md5()-Wert von einem Leeren Feld ist wohl immer der gleiche. Und wenn Du den in die DB eingetragen hast, dann steht da ein Datensatz mit Username = "" und Passwort = md5("") drin.
gibt nur einen benutzer in dieser datenbank ( testdb )
name: ronny
pw: ronny
Und wenn Du nun noch
die $_POST ausgeben lässt, genauso wie Du es mit den $_SESSION jetzt gemacht hast, geht Dir vielleicht ein Licht auf. Ist nur 'ne Idee...
bringt mich auch nicht weiter, kommt alles so wie es soll.
danke
ronny
Hello,
bringt mich auch nicht weiter, kommt alles so wie es soll.
aber diese Frage hast Du noch nicht beantwortet:
Hello Ronny,
$usr = $eingabe_name;
$pass = $eingabe_pass;
$md_pass = md5($pass);
Woher kommen die?
require("db.php");
Was steht da drin?
Grüße
Tom
$usr = $eingabe_name;
$pass = $eingabe_pass;
$md_pass = md5($pass);Woher kommen die?
aus dem loginfeld, angezeigt auf der seite nach dem login ( hier wird der login überprüft ) mit deiner $_POST variante
Array
(
[txt_usr] => ronny
[txt_pass] => müll ( obwohl passwort ronny ;) )
)
require("db.php");
Was steht da drin?
nur der server,user,pass kram und
$conn = mysql_connect($db_server,$db_username,$db_passwort)or die ("Verbindungsabbruch");
mysql_select_db($db_database)or die ("Datenbankauswahl fehlerhaft");
naja, wie gesagt, der login klappt, alle daten die ich haben will werden nach dem login abgeholt, aber passwort ist meinem script scheinbar egal ;) und wenn ich mich mit einem unbekannten user einlogge, dann komme ich auch auf die interne seite, aber es wird dort eben nichts getan, obwohl ja eigentlich ne header["location"] sache passieren sollte.
danke
ronny
Hello Ronny,
$usr = $eingabe_name;
$pass = $eingabe_pass;
$md_pass = md5($pass);Woher kommen die?
aus dem loginfeld, angezeigt auf der seite nach dem login ( hier wird der login überprüft ) mit deiner $_POST variante
Array
(
[txt_usr] => ronny
[txt_pass] => müll ( obwohl passwort ronny ;) )
)
Das wird ja ne unendliche Geschichte. Da kann doch nur irgendwo ein Schreibfehler sein oder Dein Browser steht auf automatischer Formularunterstützung ohne Nachfrage...
Letzter Versuch:
Poste mal den relevanten Ausschnitt aus dem Anmeldeformular.
Grüße
Tom
hi,
Das wird ja ne unendliche Geschichte.
ich glaub auch ;)
Da kann doch nur irgendwo ein Schreibfehler sein
war auch grad mein gedanke beim rauchen
, aber finde nix
Letzter Versuch:
Poste mal den relevanten Ausschnitt aus dem Anmeldeformular.
<form action="test.php" method="Post">
<div align="center"><br>
<br>
<br>
<table border=0>
<tr>
<td align="center" valign="top"> <p align="justify"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="txt_usr" size="8" maxlength="20">
<br>
<font color="#CC0033">Name </font></font></p></td>
</tr>
<tr>
<td align="center" valign="top"> <div align="justify"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
<input type="Password" name="txt_pass" size="8" maxlength="20">
<br>
<font color="#CC0033">Passwort </font></font></div></td>
</tr>
</table>
<input type="submit" value="LogIn">
</div>
</form>
ähm, ja ich weiß..font usw ;)
danke
ronny
Hello Ronny,
Poste mal den relevanten Ausschnitt aus dem Anmeldeformular.
^ so sagte ich es, und das ist relevant: v
<form action="formresponder.php" method="Post">
<input type="text" name="txt_usr" size="8" maxlength="20">
<input type="Password" name="txt_pass" size="8" maxlength="20">
<input type="submit" value="LogIn">
</form>
Dem Button fehlt ein Name. Aber das ist ja hier nicht wichtig.
Funktioniert einwandfrei.
Getestet mit meinem "Wunderscript" formresponder.php.
Ich hatte da schon so einen Verdacht, dass type="Password" vielleicht einen enctype brauchen würde. Man weiß ja nie so genau...
Der Fehler kann also nur in Deinem "test.php" liegen, dass aus der $_POST der Wert nicht ordentlich ausgelesen wird. Diese Umkopierere ist auch nicht notwendig. Man kann das POST-Array einer Sicherheitsbehandlung unterziehen mit Array_Map() und den gewünschten Kastrationen und dann im ganzen Script verwenden.
Viele hier scheinen noch nie speicherkritische Scripte gehabt zu haben.
Grüße
Tom
hi,
Der Fehler kann also nur in Deinem "test.php" liegen, dass aus der $_POST der Wert nicht ordentlich ausgelesen wird.
jut, dann werd ich mir zum hundertsten mal das ding vornehmen ;)
dank dir erstmal
ciao
ronny
hi,
also habe mein script neugeschrieben, aber in einer anderen form. arbeite nicht mehr mit zwei dateien für den login sondern mit einer ( wie nennt man das? --> affenscript oder so, war es das? )
ich denke mal, das ganze war einfach ein problem mit dem sessionhandling und falscher variablenzuweisung oder sonst solch kram. fehler habe ich generell keinen gefunden.
ich könnte mein neues script hier posten, wenn du willst mach ich es, aber ich denke mal, du hast solch teile schon öfter gesehen ;)
danke
greetz
ronny
Hello Ronny,
$usr = $eingabe_name;
$pass = $eingabe_pass;
$md_pass = md5($pass);
Woher kommen die?
require("db.php");
Was steht da drin?
Grüße
Tom