PHP Sicheres Login - Passwort-Verschlüsselung
Hier ist das login-system für die sichere Anmeldung umgesetzt werden/
main_login.php
<form name="form1" method="post" action="checklogin.php">
Username:<input name="myusername" type="text" id="myusername" /> <br />
Password:<input name="mypassword" type="password" id="mypassword" />
<input type="submit" name="Submit" value="Login" />
</form>
Checklogin.php
<?php
ob_start();
$host="localhost"; //Host name
$username="root"; //Mysql username
$password=""; //Mysql password
$db_name="cosmos"; //Database name
$tbl_name="members"; //Table name
//Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
//Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
//To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
//Mysql_num_row is counting table row
$count=mysql_num_rows($result);
//If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
//Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
login_success.php
<?php
session_start();
if(isset($_SESSION['username']) && ($_SESSION['username'] == $myusername)){
header("location:main_login.php");
}
?>
<html>
<body>
Login Successful. <a href="logout.php">Logout</a>
</body>
</html>
logout.php
<?php
session_destroy();
header("location:main_login.php");
?>
das problem ist, dass ich das machen will, secure login durch Passwort-Verschlüsselung oder in sonstiger Weise (wenn überhaupt). Ich bin Anfänger in PHP
- was genau Sie verschlüsseln möchten, und warum?
- Sie sollten die Art
password
für Passwort-Eingabefelder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie verschlüsseln Sie das Kennwort zu einem gewissen Grad mit md5. Sie müssten md5 das Passwort aus, wenn der Benutzer sich anmeldet und vor der Anmeldung von md5....
Beispiel:
//Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$mypassword = md5($mypassword);
Würden Sie auch brauchen, um zu verwenden, wenn ein Benutzer sich anmelden.
Als ein Anfänger, die meisten wahrscheinlich, dass Sie benötigen keine Verschlüsselung. Vor allem, weil es wäre Javascript, nicht PHP.
Obwohl es getan werden kann.
Sie könnte verwenden Hash-Herausforderung für die Implementierung der Digest-Authentifizierung schema
Gibt es eine Menge von Javascript-MD5-hashing-Algorithmus-Implementierungen über das internet.
Natürlich ein SSL-Zertifikat bevorzugt würde, über diese hausgemachte Umsetzung.
Aber um die richtige Antwort, müssen Sie noch klären, was genau Sie verschlüsseln möchten und warum. Und warum haben Sie nicht besorgt über die Sicherung etwas anderes. Ihre gesamte Datenbank zum Beispiel.
Einige Hinweise für eine Weile.
Ihre login_success code würde nicht funktionieren und schützen nichts.
Es sollte nur
weil es kein $myusername variable zu vergleichen.
Und es sollte
exit;
direkt nachheader("location:...
Oder ein Kunde bekommt die geschützten Inhalte sowieso
Können Sie mit md5($Passwort) oder sha1($Passwort) während des Einsetzens der Anmeldung Daten zur Tabelle.
match wieder für den login login
$sql="SELECT * FROM $tbl_name WHERE username='$Benutzername "' und Kennwort='".md5($mypassword)."'";
$Ergebnis=mysql_query($sql);
Gibt es einen anderen Weg, um zu schützen, weiter. Mit einer Kombination von sha1 und salt.
Übrigens, warum spielst du nicht schnell ein paar php-framework coz diese kleinen Dinge sind bereits mit Ihnen aufgebaut.
Dank
Machen diese ein wenig mehr sicher sind, sollten Sie die Speicherung von verschlüsselten Passwörter in der Datenbank, und vergleichen Sie dann die verschlüsselte eingegebene Passwort mit dem gespeicherten hash. Diese Weise, wenn jemand irgendwie greift auf die Mitglieder-Tabelle, Sie können nicht sehen die tatsächlichen Passwörter.
Nehme an, das Passwort ist
myPassword
dann nicht nur speichern, hash die ersten, die es mit Hilfe eines Algorithmus wiemd5
speichert dann den hash, istdeb1536f480475f7d593219aa1afd74c
in Ihrer Datenbank. Dann, wenn der Benutzer ein Kennwort eingibt, Hashen und vergleichen Sie zwei hashes.Sicherer Ansatz, verwenden SSL.
Sollten Sie verwenden
Müssen Sie speichern den Hash-Passwort-und hash-Kennwörter, bevor Sie vergleichen Sie mit der gespeicherten. md5 ist nicht geeignet, Hash-Passwörter finden Sie unter:
http://uk1.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash
Sie sollten auch erwägen, Salze
Normalerweise nach dem store-ein hash der Passwörter in der Datenbank finden Sie md5 dies jedoch nicht sicher zwischen der Webseite und dem server - dafür müssen Sie https verwenden.
Gibt es hier zwei Dinge.
1.
Wenn ich bin ein dummer user, und wenn ich melden Sie sich für Ihre Website, die ich habe zu geben ein Kennwort ein, ich könnte das gleiche Passwort wie ich an anderer Stelle eingesetzt, so dass Ihre Website sollte wirklich store ein hash des Passworts anstelle der realen Sache, so dass, wenn Sie werden gehackt, der Angreifer werde nicht mein Passwort, dass ich Sie überall verwendet. Um dies zu tun, speichern Sie den Hashwert in Ihre Mitglieder-Tabelle und in der Abfrage, die überprüft, es ist gültig, übergeben Sie einen hash statt die Reale Sache.
2.
Unter http das Passwort geschickt bekommen vom browser an den server im Klartext. Wenn dies über das internet und ein Angreifer hat Zugang zu allen Netzwerken zwischen dem browser und den client-dann können Sie sehen, die Passwort - wenn Sie hash im browser mit javascript kann der Angreifer Holen die hash und vielleicht nutzen diese, um auf Ihrer Website anmelden. Das ist, warum wir haben https. Für geringe Kosten (vor allem im Vergleich zu den Entwicklungskosten), können Sie kaufen ein Zertifikat, sicher ist die Verbindung. Wenn Sie nicht möchten, dies zu tun, können Sie selbst signieren ein Zertifikat, und verwenden Sie diese. Wenn Ihr hosting ermöglicht es Ihnen nicht um ein Zertifikat verwenden, dann könnte es möglich sein, erstellen Sie eine home-brew-Lösung, aber es ist viel besser, einfach zu finden, andere hosting.
md5 wäre das beste in diesem Fall. Führen Sie die Eingabe der Details wie Passwort durch die MD5-Funktion und einfügen in Ihre Datenbank.
Fast unreverseable so dass der einzige Weg, es zu benutzen ist die Verwendung von MD5 auf login auch und compair die md5-Passwort vom login mit der version in der Datenbank gespeichert.