Benutzername und Passwort-überprüfung in php-mysql
Was ich im Stande sein will zu tun ist: Wenn ein Benutzer Ihre Benutzernamen und Ihr Passwort in das Formular auf der index.html Seite, wenn Sie mit dem übereinstimmen, was in der DB, dann bekommen Sie geschickt, um die nächste Seite; userlogin.php.
Wenn Sie Ihren Benutzernamen oder Ihr Passwort ist falsch, dann werden Sie gefragt, zu re-geben Sie Ihre details auf der index.html Seite, und zeigt eine Fehlermeldung wie, "Ihr Benutzername ist Falsch" oder "Ihr Kennwort ist Falsch" über den Formular-text-Feld. Ich kann fügen Sie diesen code, falls erforderlich.
Kann ich diesen text ändern schriftart, Farbe, rot zum Beispiel?
Dies ist der code, den ich derzeit für die userlogin.php Seite
<?php
mysql_connect("Server", "root", "Gen") or die("Couldn't select database.");
mysql_select_db("generator") or die("Couldn't select database.");
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE Username = '$username' AND Password = '$password' ";
$result = mysql_query($sql) or die(mysql_error());
$numrows = mysql_num_rows($result);
if($numrows > 0)
{
echo 'Your in';
}
else
{
echo 'Your not in';
}
?>
- Hoffen wir, dass little Bobby Tables nicht registriert.
- Bitte, Lesen Sie über sql-injection php.net/manual/en/security.database.sql-injection.php
- Spaß beiseite, die Sie kennen sollten SQL-injection und wie vermeiden Sie es,
- toller link.
- Ist Ihre Anwendung auf das internet, so können wir es versuchen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es da sooo viele Dinge falsch mit diesem code:
1 - Sie haben eine SQL-injection-Loch.
Wenn ich eingeben
' or 1=1 LIMIT 1 --
als Benutzername, ich bekomme immer Zugriff, egal was.Ändern Sie den code in.
Finden Sie unter: Wie sieht der SQL-injection aus dem "Bobby-Tabellen" XKCD comic arbeiten?
2 - Sie speichern Sie das Passwort in das klare
Dies ist ein großer Nein Nein. Kombiniert mit der SQL-injection hole, wird es dauern, ein hacker 5 Minuten, um eine Liste aller Benutzernamen und Passwörter auf Ihrer Website.
Speichern die Passwörter als salted hash.
Benutze ich gerne den username als salt.
Speichern Sie die Passwort-hash mit:
Und testen Sie die Anmeldeinformationen des Benutzers verwenden:
Finden Sie unter: Der Secure-hash-und salt für PHP Passwörter
Und: Was ist "salt", wenn in Bezug auf MYSQL sha1?
BTW, verwenden Sie SHA2 mit einer 512 Schlüssellänge, SHA1 nicht mehr sicher, und MD5 ist auch mehr kaputt.
3 - Eine Anmeldung kann immer nur ein match gegen 1 Benutzer
Dieser code:
Macht keinen Sinn, wenn man 2 Zeilen aus der Datenbank, das ist ein klares Zeichen das jemand gehackt hat Ihr system. Der test sollte sein:
4 - Don ' T sterben, wenn es ein Fehler ist, eine routine aufrufen, um den Neustart der Verbindung oder etwas
Diesem code:
Ist in Ordnung bei der Prüfung, aber in der Produktion sollten Sie etwas tun, wie
The error recovery routine sollte die Verbindung zum server aus, melden Sie eine Fehler im Logbuch. Ist der Fehler nicht behoben werden kann, es sollte senden Sie eine E-Mail an den Systemadministrator und nur dann sterben die server aus.
[php] [xss]
oder[php] [mysql] SQL injection
auf stackoverflow.Zunächst dein code ist anfällig für SQL-injection -. Verwenden Sie PDO und prepared statements dieses Problem zu beheben. Sekunde alle, Sie sind anscheinend Speicherung von Benutzernamen unverschlüsselt. Dies ist sehr unsicher. Verwenden Sie eine - hashing-Funktion zum verschlüsseln der Passwörter und verschlüsselt das eingegebene Passwort vor dem ausführen der Abfrage, um ein match zu bekommen. Die Färbung der Ausgang ist einfach:
Und verwenden Sitzungen tatsächlich melden die Benutzer in. Nach der erfolgreichen Abfrage der user-Tabelle für die Benutzername/Passwort-Kombination, speichern Sie die zurückgegebenen user_id in der
$_SESSION
variable. Auf jede Seite, die gesichert werden muss, überprüfen Sie für die Existenz von$_SESSION['user_id']
; wenn es nicht da ist, Ihre Benutzer anmelden muss, so umzuleiten, ihn auf die login-form.Sollte über den trick tun für dich 😉
$session = hash('sha512', 'username'.$currentdate.$currenttime);
Dies generiert eine eindeutige session_id für jede Sitzung, die eine Verbindung erraten werden.