|
|
|
Loginscript
Falls du dich schon mit Sessions auskennst, dann solltest du diese Anleitung benutzen.
Jetzt lernen wir, wie wir mit PHP einen Loginscript erstellen. Für den Login-Script brauchen wir keine MySQL Datenbank, die Benutzernamen und Passwörter werden verschlüsselt in einer Text Datei gespeichert.
Natürlich ist dies nicht das Optimun an Sicherheit, weil ein Hacker sich die verschlüsselten Passwörter angucken könnte und diese dann evt. knacken könnte.
Zwar kann man das hier verwendete Verschlüssellungsverfahren (md5) nicht wieder entschlüsseln, aber er kann solange Wörter eingeben, bis er das Passwort gefunden hat.
Deswegen sollte man auch immer Passwörter mit Zahlen und Buchstaben benutzen.
Schritt 1: Neuer Account
Zuerst möchten wir mit dem Script einen neuen Account anlegen, damit sich der User evt. später von alleine Registieren kann.
Dazu brauchen wir ein ganz normales HTML-Formular mit 3 Feldern.
Einmal ein Feld wo man seinen Benutzernamen (Name: username) eingibt, dann ein Feld wo man sein Passwort eingibt (Name: passwort) und noch ein Feld, wo man sein Passwort bestätigt (Name: passwort2).
Das sieht ca. so aus:
<form action="eintragen.php" method="post">
Dein Username:<br>
<input type="text" size="24" maxlength="50"
name="username"><br><br>
Dein Passwort:<br>
<input type="password" size="24" maxlength="50"
name="passwort"><br>
Passwort wiederholen:<br>
<input type="password" size="24" maxlength="50"
name="passwort2"><br>
<input type="submit" value="Abschicken">
</form>
Jetzt kommen wir zum intressanten Teil, dem PHP Script. Dieser Script soll den Benutzername und das Passwort nur speichern.
Zuerst fragen wir die eingegebenden Daten ab:
<?php
$username = $_POST["username"];
$password = $_POST["passwort"];
$password2 = $_POST["passwort2"];
?>
Danach überprüfen wir zuerst, ob überhaupt die beiden Passwörter identisch sind, dafür benutzen wir einfach eine if-Anweisung.
Natürlich wollen wir auch verhindern, das ein Benutzername doppelt vorkommt, sonst gibt es später beim Login Probleme, deswegen erstellen wir ein leeren Array.
Zum schluss verschlüsseln wir noch das Passwort mit der Funktion md5.
<?php
if ($password == $password2)
{
$user_vorhanden = array();
$passwort = md5($password);
}
else
{
echo "Die Passwörter waren nicht identisch
<br><a href=\"eintragen.html\">zurück</a>";
}
?>
Jetzt wollen wir ja nachgucken, ob es den Benutzernamen schon gibt, deswegen öffnen wir die Datei, in der die Benutzernamen und Passwörter gespeichert werden.
Diese Befehle müssen jetzt natürlich auch noch alle in den if Teil.
<?php
if ($password == $password2)
{
$user_vorhanden = array();
$passwort = md5($password);
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
array_push ($user_vorhanden,$userdata[0]);
}
fclose($userdatei);
}
?>
Wir öffnen jetzt die Datei, und lesen sie immer Stück für Stück aus. Dabei legen wir nur den Benutzernamen in das Array $user_vorhanden ab.
Wenn in dem Array alle Benutzernamen gespeichert wurden, wird die Datei noch geschlossen.
Jetzt haben wir alle Benutzernamen in dem Array $user_vorhanden, aber jetzt wollen wir gucken, on der Benutzername schon vorhanden ist. Dafür können wir doch ganz einfach in_array benutzen.
Dieser Befehl muss auch wieder in den ersten if-Teil, denn wir wollen die Befehle ja nur ausführen lassen, wenn die Passwörter identisch waren.
Die if-Anweisung sieht jetzt so aus:
<?php
if ($password == $password2)
{
$user_vorhanden = array();
$passwort = md5($password);
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
array_push ($user_vorhanden,$userdata[0]);
}
fclose($userdatei);
if (in_array($username,$user_vorhanden))
{
echo "Username schon vorhanden <br>
<a href=\"eintragen.html\">zurück</a>";
}
}
?>
Mit in_array schauen wir ob $username, dieser Wert stammt aus dem Formular, schon in dem Array gespeichert wurden, wenn dies nicht der Fall ist, brauchen wir else..
Diese Anweisungen stehen immer noch im ersten if Teil.
<?php
if ($password == $password2)
{
$user_vorhanden = array();
$passwort = md5($password);
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
array_push ($user_vorhanden,$userdata[0]);
}
fclose($userdatei);
if (in_array($username,$user_vorhanden))
{
echo "Username schon vorhanden <br>
<a href=\"eintragen.html\">zurück</a>";
}
else
{
$eintrag ="$username|$passwort";
$userdatei = fopen ("user.txt","a");
fwrite($userdatei, "$eintrag\n");
fclose($userdatei);
echo "$username, deine Anmeldung war
erfolgreich<br>
<a href=\"login.html\">zum Login</a>";
}
}
else
{
echo "Die Passwörter waren nicht identisch <br>
<a href=\"eintragen.html\">zurück</a>";
}
?>
Jetzt speichern wir den Benutzername und das verschlüsselte Passwort in der Text-Datei user.txt. Wenn Ihr diesen Script benutzt, sollte keiner den Namen der Datei wissen, damit man Useraccounts nicht so leicht hacken kann.
Der fertige Script sieht dann so aus (eintragen.php):
<?php
$username = $_POST["username"];
$password = $_POST["passwort"];
$password2 = $_POST["passwort2"];
if ($password == $password2)
{
$user_vorhanden = array();
$passwort = md5($password);
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
array_push ($user_vorhanden,$userdata[0]);
}
fclose($userdatei);
if (in_array($username,$user_vorhanden))
{
echo "Username schon vorhanden <br>
<a href=\"eintragen.html\">zurück</a>";
}
else
{
$eintrag ="$username|$passwort";
$userdatei = fopen ("user.txt","a");
fwrite($userdatei, "$eintrag\n");
fclose($userdatei);
echo "$username, deine Anmeldung war erfolgreich
<br><a href=\"login.html\">zum Login</a>";
}
}
?>
Schritt 2: Login
Jetzt kommen wir zum Login.
Dafür brauchen wir natürlich wieder ein Formular mit zwei Feldern (Username und Passwort mit den Namen: username und password).
Ca so:
<form action="login.php" method="post">
Dein Username:<br>
<input type="text" size="24" maxlength="50"
name="username"><br><br>
Dein Passwort:<br>
<input type="password" size="24" maxlength="50"
name="password"><br>
<input type="submit" value="Login">
</form>
Das Formular ist weiter nicht intressant, aber der PHP Script. Wie immer fragen wir zuerst die beiden Felder ab, und verschlüsseln das Passwort mit der md5-Funktion.
Außerdem geben wir der Variable $log noch den Inhalt 0, warum werdet Ihr später sehen.
<?php
$username = $_POST["username"];
$passwort = $_POST["password"];
$passwort = md5($passwort);
$log = 0;
?>
Im nächsten Schritt öffnen wir die Datei (user.txt) und lesen diese immer nach und nach.
Dabei trennen wir wieder den Benutzername von dem Passwort, damit wir beides überprüfen können.
Dann schauen wir, ob die Eingaben aus dem Formular mit denen aus der Datei übereinstimmen.
Wenn dies der Fall ist, wird der Variable $log der Inhalt 1 zugeordnet.
<?php
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
if ($userdata[0]==$username and
$passwort==trim($userdata[1]))
{
echo "Hallo $username";
$log = 1;
}
}
fclose($userdatei);
?>
Aber warum steht da $passwort==trim($userdata[1])?
Ganz einfach, mit trim entfernen wir am Anfang und am Ende des Passwortes überflüssige Zeichen, z.B. Leerzeichen und auch ein Zeilenumbruch.
Wir müssen dies machen, weil die Passwörter immer mit einem Zeilenumbruch am Ende gespeichert werden.
Würden wir dies nicht machen, würde der Script nicht funktionieren, weil ein Wort mit einem Zeilenumbruch am Ende nicht das gleiche Wort ist, als wenn es keinen Zeilenumbruch hat.
Wenn jetzt das Passwort und der Benutzername richtig ist, gelangt der User in den Userbereich (hier: Hallo $username).
Wenn kein Benutzername bzw. Passwort passt, dann hat die Variable $log immer noch den Inhalt 0.
Das können wir wiederrum mit einer if-Anweisung überprüfen.
<?php
if ($log==0)
{
echo "Zugriff verweigert";
}
?>
Das wars auch schon.
Am Ende sieht die Datei so aus:
<?php
$username = $_POST["username"];
$passwort = $_POST["password"];
$passwort = md5($passwort);
$log = 0;
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
if ($userdata[0]==$username and
$passwort==trim($userdata[1]))
{
echo "Hallo $username";
$log = 1;
}
}
fclose($userdatei);
if ($log==0)
{
echo "Zugriff verweigert";
}
?>
user.txt sieht ca. so aus:
Andavos|d878c179fbeef70c7ff44efb1b7c6582
Clanwissen|ca84eb2233d12ae1dba1dca04cead3c8
Noch ein Tipp:
In der Datei, in der die Passwörter gespeichert werden, die sollte immer geheim bleiben.
Download des Scripts (Server 1)
Download des Scripts (Server 2)
Autor Andavos
|
|
|
|