Eingaben nicht gefunden -> es kommt weiße Seite
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
art
ausgabe
bedingung
beginn
benutzer
benutzername
code
datei
datum
desaster
durchlauf
einwandfrei klappen
information
login
ordnung
post
problem
schleife
url
wissen
-
Hallo,
ich hab euren Rat bei dem vorherigen Thema von mir umgesetzt, aber jetzt stoße ich auf ein ziemlich Haaresträubendes Problem:
Wenn ihr euch bitte hier kurz einloggen versucht (einfach irgendwas eingeben) : http://www.the-penguins.com
seht ihr, dass bei euren falschen Eingaben immer ne weiße Seite kommen wird. Das famose daran ist aber, wenn alles korrekt ist funktionierts...
Hier habt ihr den code der
func.login.php (MYSQL Daten wurden ersetzt...)
<?php
$db = @new mysqli('mysql.lima-city.de', 'user', 'pass', 'db_138318_3');
$sql = 'SELECT `user` , `pass`
FROM db_138318_3.penguins_user
WHERE user = "'.$_POST['user'].'"';
////////////////////////////////////
// festlegen von $result und $row //
////////////////////////////////////
$result = $db->query($sql);
while ($row = $result->fetch_assoc()) {
/////////////////////////////
// Überprüfen der Eingaben //
/////////////////////////////
if ($_POST['pass'] != $row['pass']) {
$msg = 'Das Passwort ist nicht korrekt!';
include('./login.php');
}else{
$msg_green = 'Wilkommen zurück, '.$_POST["user"].'!';
include('./login.php');
}
}
?> -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich frage mich, wie das überhaupt gehen soll. Angenommen es gibt 4 User. Der Einfachheit halber sind die Usernames A-D und die Passwörter der Username in klein.
Der User loggt sich mit den Daten C und c ein. Ich sage dir, die Ausgabe wird so lauten, vorrausgesetzt du machs endlich mal die Ausgabe der Variable $msg: "Das Passwort ist nicht korrekt!".
Die Variable hat nämlich folgende Werte:
1. Durchlauf: 'Das Passwort ist nicht korrekt!' 2. Durchlauf: 'Das Passwort ist nicht korrekt!' 3. Durchlauf: 'Wilkommen zurück, D!' 4. Durchlauf: 'Das Passwort ist nicht korrekt!'
Nach dem letzten Durchlauf ist wieder die Melung, dass das Passwort falsch ist in der Variable. Durchdenke das bitte nochmal. -
also zuerst mal:
$sql = 'SELECT `user` , `pass`
FROM db_138318_3.penguins_user
WHERE user = "'.$_POST['user'].'"';
BÖSE! BÖSE! BÖSE! Mein Benutzername auf neuen Seiten ist grundsätzlich erstmal "' OR 1=1", auch wenn ich noch nicht registriert bin. bei dir würde das einwandfrei klappen ;)
und zum problem: was steht denn in der login.php drinnen, die du includest?
und zum weiteren: wenn du einen falschen benutzernamen eingibst, passiert genau.... gar nichts. er kommt nie in die schleife rein, includet die login.php nicht und die seite bleibt weiss (ich erkenne einen zusammenhang zum problem *g*)
@drafed-map: solange es nur einen User C in der DB gibt, gibts auch nur einen durchlauf. aber du hast recht, schön ist diese art des logins sicher nicht... -
desaster-productions schrieb:
@drafed-map: solange es nur einen User C in der DB gibt, gibts auch nur einen durchlauf. aber du hast recht, schön ist diese art des logins sicher nicht...
Ja, solange es nur einen User C gibt ist alles in Ordnung. Aber ich habe ja geschrieben, es gibt 4 User, A bis D.
desaster-productions schrieb:
BÖSE! BÖSE! BÖSE! Mein Benutzername auf neuen Seiten ist grundsätzlich erstmal "' OR 1=1", auch wenn ich noch nicht registriert bin. bei dir würde das einwandfrei klappen ;)
Ja, aber eigentlich können wir das nicht wissen, er kann ja die Post- und Get-Informationen schon zu beginn der Seite gefiltert haben, wenn man aber einen solchen Code schickt, halte ich das für sehr unwahrscheinlich. -
Ja, solange es nur einen User C gibt ist alles in Ordnung. Aber ich habe ja geschrieben, es gibt 4 User, A bis D.
das meinte ich nicht, ich meinte nur einen use namens "C" (und nicht zwei davon) und beliebig viele andere. das result wird ja durch die where-klausel auf 1 datensatz begenzt. oder überseh ich was?
Ja, aber eigentlich können wir das nicht wissen, er kann ja die Post- und Get-Informationen schon zu beginn der Seite gefiltert haben, wenn man aber einen solchen Code schickt, halte ich das für sehr unwahrscheinlich.
ob es gefiltert ist, wissen wir nicht. falls nicht, habe ich ihn/sie auf ne lücke in allen scripts aufmerksam gemacht, welche usereingaben in sql-statements verwenden. besser einmal zuviel warnen als einmal zu wenig *g*
Beitrag zuletzt geändert: 28.11.2009 16:21:02 von desaster-productions -
Hmm... ich versteh nicht, was ihr meint, könnt ihr bitte eure Ideen in Codeschnipselform posten?
Achja, da kommt noch ein Problem dazu, wie soll die Mysql-Abfrage lauten, die mir sagt, ob ein Benutzer schon vorhanden ist?
Mit
und anschließenden$mysql = 'SELECT `user` FROM `db_138318_3`.`penguins_user` WHERE user = "'.$_POST['user']'"'
funktionierts auch ned, obwohl ich die Variable $row definiert habe...if ($_POST['user'] == $row['user']) { $msg = 'benutzer schon vorhanden' bla }else{ bla bla }
-
Man kann entweder Username und Passwort ungefiltert lassen, in eine SQL-Bedingung reinpacken, und schauen, ob es überhaupt einen Treffer gibt, oder man setzt eine Variable auf false (überflüssig, wenn man schlau genug ist, Register Globals ab zu schalten), durchläuft alle Einträge der User-Tabelle, und prüft bei jedem Durchlauf, ob post-Username gleich DB-Username, und post-Passwort gleich DB-Passwort ist. Wenn die Bedingung erfüllt ist, wird die Variable auf true gesetzt, wenn sie nicht erfüllt ist, passiert garnichts. Nach Beendigung der Schleife wird dann geschaut, ob die Variable true oder false ist.
-
Hab (leider) erst jetzt nachgesehen, weil ich die ganze Zeit rumprobiert hab, und habs sogar gelöst!
@Drafed-Map: Genau so hatte ich es mir gedacht und hab die ganze Datei umgeschrieben... du hattest recht gehabt
-- Danke Karpfen (oder nikic), kannst nun schließen
nikic: Da gelöst ==> geschlossen :)
Beitrag zuletzt geändert: 29.11.2009 9:27:01 von nikic -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage