Moin!
Also das anmelden funktioniert 1a :-) vielen dank euch allen!
Bis auf das SQL-Injection-Thema. Das hast du immer noch nicht geblickt - bist jetzt aber voller Hoffnung, es wäre gelöst, was ein fataler Irrtum ist. Peinlich, dass das keiner der bisherigen Threadteilnehmer bemerkt hat.
Ich kommentiere mal, was mir arg auffällt:
> if (isset($_POST['set']))
> {
// Kopiere niemals Werte aus $_POST, $_GET, $_COOKIE in eigene Variablen. Zwei Gründe: 1. Verbraucht es sinnlos Speicherplatz. 2. Signalisiert der GROSS geschriebene Variablenname "GEFAHR! Manipulierbare Benutzereingabe, muss immer passend escaped werden!".
> $ben = $_POST['Benutzer'];
> $pass = $_POST['Pw'];
// Diese zwei Zeilen also bitte löschen. Nutze direkt $_POST['Benutzer'] etc.
// Die Sicherheitslücke ist das hier:
> mysql_real_escape_string($ben);
> mysql_real_escape_string($pass);
// Mysql gibt als Funktionsergebnis den escapten String zurück, den man weiterverwenden muß, indem man ihn beispielsweise in einer Variablen speichert. Das tust du hier nicht! Die zwei Zeilen also bitte auch löschen.
> $Npass = MD5($pass);
// Die Funktion MD5() funktioniert genauso, wie mysql_real_escape_string() - und die kannst du auf einmal richtig anwenden! Aber das Behandeln von Daten sollte zentral und ohne unnötige neue Variablen passieren.
> mysql_connect(localhost, ***, "***");
> mysql_select_db("***");
> $res = mysql_query("select * from Mitglieder where Name = '$ben' and Pw = '$Npass'");
// Umgekehrt ist es aus Debugging-Gründen extrem sinnvoll, den SQL-String in einer eigenen Variablen zu speichern und die Variable dann an mysql_query() zu übergeben.
// Also neuer Code:
// 1. SQL zusammensetzen:
$sql = "SELECT * FROM Mitglieder WHERE Name = '".mysql_real_escape_string($_POST['Benutzer'])."' AND Pw = '".mysql_real_escape_string(md5($_POST['Pw']))."'");
// 2. Query abschicken und im Fehlerfall Skript mit Meldung abbrechen (Hardcore-Methode während der Entwicklungszeit - schöner wäre, mit $res === false zu prüfen, ob der Query fehlerhaft war, und dann netter zu verzweigen).
$res = mysql_query($sql) or die ("SQL-Query: ".$sql." mit Fehler ".mysql_error());
> $num = mysql_num_rows($res);
- Sven Rautenberg
--
"Love your nation - respect the others."
"Love your nation - respect the others."