Frage zu Login-System mit Sessions

Ich finde die Zeile hier verdächtig:
<input type="hidden" name="Kontrolle" id="Kontrolle" value="1" /></td>

Du fragst ja ab, ob der Wert von $_POST['Kontrolle'] == 1 ist, aber das ist er ja immer, also kommt auch jedes mal ein Fehler.

Außerdem würde ich in dieser Zeile, das $_POST['Passwort'] entfernen, da man ein Passwort nie in den Quelltext schreiben sollte:
<td><input type="password" name="Passwort" value="'.$_POST['Passwort'].'" />

// EDIT:
Du brauchst nicht stripslashes() parallel zu mysql_real_escape_string() verwenden:
PHP:
$Email = stripslashes($Email); // Kannst du entfernen
$Passwort = stripslashes($Passwort); // Kannst du auch entfernen
$Email = mysql_real_escape_string($Email);
$Passwort = mysql_real_escape_string($Passwort);

Außerdem solltest du die mit mysql_real_escape_string() behandelten Variablen dann auch in deinem Query nutzen. Und man sollte bei solchen empfindlichen Daten auch kein $_REQUEST[] sondern nur $_POST[] verwenden:
PHP:
$sql = "SELECT ". 
    "Id, Vorname, Nachname, Email, Anmeldedatum, Person, Lastlogin, Aktivierung". 
  " FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Email like '".$_REQUEST["Email"]."') AND ".
    "(Passwort = '".md5 ($_REQUEST["Passwort"])."')"; 
$result = mysql_query ($sql);

Und du solltest lieber eine SHA-Verschlüsselung wie z.B. sha1() anstatt von md5() nutzen, da MD5 eher unsicher ist, da dafür genug Rainbow Tabels existieren
 
Zuletzt bearbeitet:
Ich finde die Zeile hier verdächtig:
<input type="hidden" name="Kontrolle" id="Kontrolle" value="1" /></td>

Du fragst ja ab, ob der Wert von $_POST['Kontrolle'] == 1 ist, aber das ist er ja immer, also kommt auch jedes mal ein Fehler.

Außerdem würde ich in dieser Zeile, das $_POST['Passwort'] entfernen, da man ein Passwort nie in den Quelltext schreiben sollte:
<td><input type="password" name="Passwort" value="'.$_POST['Passwort'].'" />

1. Also $_POST["Kontrolle"] ist erforderlich weil man will ja dass die Nachricht nur kommt wenn auf submit gedrückt worden ist?! So hab ichs zumindest auf irgend ner Seite gelernt, aber vielleicht ist das auch falsch - ich machs mal weg und schau obs noch geht.
Habs ausprobiert. Wenn man Kontrolle wegmacht,dann wird schon direkt beim Aufruf der Seite der "Fehler", dass beide Felder nicht ausgefüllt sind angezeigt.

2. Wie soll ich aber dann dass Passwort abfragen?
 
Zuletzt bearbeitet:
Das Passwort fragst du doch per $_POST['Passwort'] ab. Das value=".$_POST['Passwort']." bewirkt, dass das Passwort nach einem Fehler noch in dem Feld eingetragen ist, was bedeutet, dass es unverschlüsselt im Quelltext steht.

Zu deinem $_POST['Kontrolle']-Problem: da musst du den Inhalt von value="" dynamisch erzeugen, z.B. so:
PHP:
if($_POST['Kontrolle'] == 'TRUE')
 {
  // Fehler ausgeben
 }

// ... 
// Formular:
if(!isset($_POST['Kontrolle'])
 {
  $kontrolle = 'FALSE'
 }
 else
 {
  $kontrolle = 'TRUE'
 }

echo '<input type="hidden" name="Kontrolle" id="Kontrolle" value="'.$kontrolle.'" />';
 
Zuletzt bearbeitet:
Das Passwort fragst du doch per $_POST['Passwort'] ab. Das value=".$_POST['Passwort']." bewirkt, dass das Passwort nach einem Fehler noch in dem Feld eingetragen ist, was bedeutet, dass es unverschlüsselt im Quelltext steht.

Zu deinem $_POST['Kontrolle']-Problem: da musst du den Inhalt von value="" dynamisch erzeugen, z.B. so:
PHP:
if($_POST['Kontrolle'] == 'TRUE')
 {
  // Fehler ausgeben
 }

// ... 
// Formular:
if(!isset($_POST['Kontrolle'])
 {
  $kontrolle = 'FALSE'
 }
 else
 {
  $kontrolle = 'TRUE'
 }

echo '<input type="hidden" name="Kontrolle" id="Kontrolle" value="'.$kontrolle.'" />';

Vielen Dank mal wieder für deine hilfreichen Tipps =) Habs umgesetzt.
aber ich wüsste trotzdem noch gerne, ob so etwas mit einem Cookiefaker machbar wäre?
 
Du könntest z.B. das Passwort in deiner Session speichern und dann jedes mal das letzte eingegebene Passwort aus der Session abfragen, ob es jetzt richtig ist. Damit die Sterne im Passwort-Feld stehen kannst du z.B. das hier nutzen:
PHP:
echo '<input type="password" name="Passwort" value="'.str_repeat(strlen($_SESSION['Passwort']), '*').'" />';

Das bewirkt, dass anstatt des richtigen Passwortes nur Sterne im Quelltext angezeigt werden (und zwar genauso viele, wie Zeichen das Passwort hat). Falls dann das Passwort verändert wurde, überprüfst du einfach, ob es einen Unterschied zwischen dem "Fake" mit den Sternen und der neuen Eingabe gibt.
 
  • Gefällt mir
Reaktionen: M-P
Vielen Dank für alles; war ne Weile im Urlaub und hab jetzt alles so hinbekommen wie ichs wollte=)
(Das alles hätte ich ohne deine Hilfe nicht geschafft =)) ->> to "einfach nur crack" DANKE!
 
Zurück