Loginsystem-problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
angreifer
bereich
code
dank
datenbank
eigentliche fehler
einstellung
ende
fehler
fehlermeldung
funktionieren
guthaben
header
http
kleine ausgabe
sicherheitsproblem
statement
umgehen
url
-
Hallo,
ich arbeite momentan an einem neuen Projekt, leider gibt es ein Problem mit dem Loginsystem.
Die Accountdaten sind in einer Tabelle in einer MySQL-Datenbank gespeichert, sobald ich die Daten in das Loginformular eingebe lädt er kurz und es passiert nichts.
Fehler werden keine ausgegeben, die Verbindung zur Datenbank wird auch hergestellt. (Accounterstellung funktioniert!)
Könnt ihr mir vielleicht helfen?
Der Login-Code:
<?php if (isset($_POST['login_send'])) // Abfrage ob Button geklickt { mysql_connect("mysql.lima-city.de", "Username", "Passwort", "3306"); mysql_select_db("Datenbank") or die("Keine Datenbankverbindung!"); $sql = "SELECT ". "*". "FROM ". "accounts". "WHERE ". "(username like '".$_POST["login_username"]."') AND ". "(passwort = '".md5 ($_POST["login_passwort"])."')"; $result = mysql_query ($sql); if (mysql_num_rows ($result) > 0) { $data = mysql_fetch_array ($result); $_SESSION["user_username"] = $data["username"]; $_SESSION["user_guthaben"] = $data["guthaben"]; header ("Location: memberbereich.php"); } else { header ("Location: index.php?fehler=1"); } } ?>
Findet ihr vielleicht einen Fehler? :S -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Abgesehen davon ob da ein Fehler drin ist oder nicht: du hast hier mindestens einen Sicherheitsfehler! Wenn magic_quotes deaktiviert sind (was sie zwar bei Lima-City nicht sind, aber trotzdem) kann jeder mit einem ' im benutzername einfach deine SQL-Anfrage soweit ändern dass er auf jeden Fall eingeloggt wird, egal ob das Passwort stimmt oder nicht. Das geht sogar noch weiter: man kann mit diesem Fehler das "guthaben" auch verstellen.
Zum Fehler selbst: du hast warscheinlich die Seite auf Lima-City gehostet. Dort sind standardmäßig Fehlermeldungen deaktiviert. Hast du schon mal versucht diese zu aktivieren (.htaccess)?
Das würde dir nämlich folgendes zeigen: du hast ein ungültiges SQL-Statement. Das was du als SQL-Statement am Ende hast sieht so aus:
Dir fehlt ein Leerzeichen zwischen * und FROM sowie zwischen accounts und WHERE!SELECT *FROM accountsWHERE (username like 'bla') AND (passwort = 'bla2')
Warum du beim username ein like verwendest weiß ich nicht.
Beitrag zuletzt geändert: 18.12.2011 20:59:47 von hackyourlife -
Hi und danke für deine Antwort!
Habe die Fehler soweit behoben, es funktioniert aber nach wie vor nicht. Und zu dem Sicherheitsproblem: Wie könnte man das denn umgehen? -
demonic-legends schrieb:
Und zu dem Sicherheitsproblem: Wie könnte man das denn umgehen?
http://de.php.net/manual/de/function.mysql-real-escape-string.php Auf alle Variablen anwenden die von außen kommen und du in einer Abfrage verwenden willst.
Lass außerdem gleich mal das like da raus. Entweder man weiß seinen Benutzernamen oder man kommt nicht rein. Damit hilfst du sonst nur Angreifern.
Dann kommt noch ein LIMIT 1 ans Ende der Abfrage, da sich logischerweise nur ein Benutzer gleichzeitig anmelden kann. Das hier if (mysql_num_rows ($result) > 0) änderst du dann auf if (mysql_num_rows ($result) == 1)
Dein eigentliche Fehler, warum du nichts siehst, wird sein, dass du schon irgendwo eine kleine Ausgabe hast (Leerzeichen oder sowas; gerne was bevor der <?php-Bereich beginnt). Somit funktionieren die header() unten nicht mehr. Aufgrund der Einstellungen von Lima werden standardmäßig keine Fehlermeldungen angezeigt.
Beitrag zuletzt geändert: 18.12.2011 21:48:22 von chatter -
chatter schrieb:
Dein eigentliche Fehler, warum du nichts siehst, wird sein, dass du schon irgendwo eine kleine Ausgabe hast (Leerzeichen oder sowas; gerne was bevor der <?php-Bereich beginnt). Somit funktionieren die header() unten nicht mehr. Aufgrund der Einstellungen von Lima werden standardmäßig keine Fehlermeldungen angezeigt.
Damit du solche Fehler auf Lima-City siehst musst du eine
-Datei anlegen mit folgendem Inhalt.htaccess
(dies ist auch hier beschrieben.)php_value display_errors 1
Wenn schon vor dem header() etwas geschrieben worden ist siehst du das als Warnung. Wenn hingegen noch ein anderer Fehler in deinem Script ist siehst du den auch möglicherweise. -
So habs mittlerweile zum laufen bekommen, danke für eure Hilfe! :)
-
Was war eigentlich der Fehler?
-
Hatte vor dem PHP-Code noch folgende Zeile:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Hatte nicht genug hochgescrollt und das dann übersehen, also konnte header() ja nicht funktionieren :x -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage