Php Login System | Bereiche mit Regeln sichern

VERALTET

Ein einfaches Tutorial vom Registrieren eines Nutzers auf deiner Webseite, über Login bis hin zu abgesperrten Mitgliederbereichen.

  • Mit Phpmyadmin eine Tabelle zusammenschustern
  • Kommunikation Datenbank <-> Script
  • Register.php | Zum erstellen des Accounts
  • Login.php | Zugangsdaten prüfen + Zufalls Session erstellen, verschlüsseln und in die Datenbank speichern
  • Funktion erstellen um Session bei Seitenwechsel zu prüfen
  • Integration der Funktion in einzelne Seiten

PhpmyAdmin

Mit Phpmyadmin sollte eine Datenbank mit einer Tabelle angelegt werden die folgende Felder beinhaltet.

Name der Tabelle: userdata
Felder: ID, user, pass, email, session, lastlogin

ID wird auf INT(10) eingestellt.
user, pass, email, session wird auf longtext gestellt
lastlogin wird auf timestamp eingestellt.
Die Tabelle bekommt ID als Index

Nachdem die Tabelle erstellt ist geht es über zur Verbindung zwischen Script und Datenbank.

Datenbank

<?php $Benutzername = "Dein Zugangs / Benutzer -name für deine Datenbank"; $Passwort = "Passwort deiner Datenbank"; $Hostname = "localhost"; // Bleibt so wenn sich DB und Webseite auf gleichem Rechner befinden $Datenbank = "Name der Datenbank nicht von der Tabelle"; $sql_connect = mysql_connect($Hostname, $Benutzername, $Passwort); mysql_select_db($Datenbank,$sql_connect) or die(mysql_error()); ?>

Dieser Php Code öffnet deine Datenbank und sollte am besten per include ins Script erfolgen. Zum üben kann das aber auch oberhalb der Form stehen.

Register.php

Die Register.php wird erstellt um Besuchern die Möglichkeit zu geben sich auf deiner Webseite zu registrieren. Hierfür wird ein einfaches Formular verwendet das aber zum heutigen Standard gut abgesichert sein sollte. Wer es nicht so mit selbst erstellten Captchas hat, hat die Möglichkeit sich an gut funktionierenden zu bedienen. Ich behandle den Teil auch so das Sicherheitsrelevante Varianten größtenteils selbst integriert werden sollten.

Es muss ja nicht immer ein Captcha sein ;D

Gut los geht´s

<html>

<form method="POST" action="">
// Wir beginnen eine form mit Post zu starten. 
Benutzername: <input type="text" name="user">

Emailadresse: <input type="text" name="emailadress">

Passwort: <input type="password" name="password">

Passwort bestätigen: <input type="password" name="passwordcheck">

<input type="Submit" name="register" value="Registrieren">

// Wichtig ist hier name und type. lediglich beim Input Type Submit ist das Value die Buttonaufschrift
	
</form>

// Wir schließen die form
<html>

Da in der Form das Feld „action“ freigelassen wurde rechnet die Form damit das der verarbeitungsrelevante Anteil sich auf der gleichen Seite befindet. Da geht es auch mit dem Eintragen und abgleichen der Daten weiter.

Nachdem geprüft wurde ob Passwort und die Passwortbestätigung übereinstimmen, prüfen wir ob der Benutzername oder die Emailadresse nicht schon in der Datenbank vorhanden sind. Bitte nicht von den Klammern verwirren lassen. Ich schreibe extra nicht im Syntax das man immer die Klammern zählen kann falls es nicht funktioniert und man auf Fehlersuche ist ^^

	
if ($_POST['password'] != $_POST['passwordcheck'])	
    {
	$message = 'Fehler - Dein eingegebenes Passwort stimmt nicht mit der Bestätigung überein.';
	}
	else
	{
$user_g = mysql_real_escape_string($_POST['user']);
$email_g = mysql_real_escape_string($_POST['emailadress']);
// Variablen werden vor der Verarbeitung entsichert um ein Korrumpieren der Datenbank zu verhindern.

$sql_u = mysql_query("SELECT user FROM userdata WHERE user= '".$user_g."'");
$data_u = mysql_fetch_assoc($sql_u);
// Daten werden, wenn möglich, aus der Datenbank geladen	
	if ($data_u['user'] != '') // Wenn ungleich dann erste Klammer ..
	{
	$message = 'Der Nutzername ist bereits vergeben.';
	}
	else
	{
	
	// Jetzt noch die Emailadresse prüfen
	$sql_e = mysql_query("SELECT email FROM userdata WHERE email= '".$email_g."'");
    $data_e = mysql_fetch_assoc($sql_e);
	
	if ($data_e['email'] != '')
	{
	$message = 'Die Emailadresse ist bereits vergeben.';
	}
	else
	{
	
	// Falls Email und Nutzername noch nicht vergeben sind dann kann jetzt eingetragen werden.
	mysql_query("
	
	INSERT INTO userdata (ID, user, pass, email, session, lastlogin) 
	
	VALUES 
	
	(
	'$id_new'
	,'".$_POST['user']."'
	,'".md5($_POST['passwort'])."'
	,'".$_POST['email']."'
	,'0'
	,'0' 
	)
	
	");
	
	$message = 'Dein Account wurde erfolgreich eingetragen';
	// Hier könnte noch zusätzliches passieren beim Erstellen des Accounts
	
	}
	}
	}
	

Hier könnte man noch einige Funktionen einfügen wie das versenden per Mail oder das abspeichern zusätzlicher Felder.

 

Login.php

Wir beginnen erst wieder damit dem Nutzer eine Form bereit zu stellen in der seine Daten mit der Datenbank abgeglichen werden.

<html>

<form method="POST" action="">
// Wir beginnen eine form mit Post zu starten. 
Benutzername: <input type="text" name="user">

Passwort: <input type="password" name="password">

<input type="Submit" name="login" value="Einloggen">
	
</form>

// Wir schließen die form
<html>

Beim Absenden des Formulars wird nun die Datenbank geprüft.

	
$user_lc = mysql_real_escape_string($_POST['user']);
$pass_lc = mysql_real_escape_string($_POST['password']);	
// Variablen werden wieder entsichert
$pass_md5 = md5($pass_lc);
	// Das Passwort wird zum Abgleich mit der Datenbank ebenfalls in md5 gespeichert.
	
$sql_lc = mysql_query("SELECT user, pass FROM userdata WHERE user= '".$user_lc."'");
$data_lc = mysql_fetch_assoc($sql_lc);	

	if ($data_lc['pass'] != $pass_md5)
	{
	$message = 'du hast ein falsches Passwort eingegeben';
	// Hier wäre die Möglichkeit die falschen Logins zu zählen
	}
	else
	{
	// Die Passwortprüfung war erfolgreich und es wird eingeloggt
	
$session = md5(rand (1,2349));
    // Eine zufällige Zahl wird mit rand erstellt, in md5 verschlüsselt und als Variable $session verpackt.
$time = time();	
    // Eine Loginzeit wird erstellt.
	
	mysql_query("UPDATE userdata SET session = '".$session."' , lastlogin = '".$time."' WHERE username = '".$user_lc."' ")or die ("MySQL-Error: " . mysql_error());
	// Die Variable Session und Lastlogin wird ganz regulär in die Datenbank gespeichert. Wichtiger Part ist hier eben 
	UPDATE -> Tabelle -> SET Datensatzfeld = $Datensatz	WHERE username = Benutzername 
	}

Die Session kann auch gerne „verschärft“ werden mit zufällig generierten Werten.

	
	$id_zusatz_vom_Besucher = date("l");
		
		// ENTWEDER ODER ^ v ^ v
		
	$id_zusatz_vom_Besucher = $_POST['submit'];
		
		
		$session md5 rand(2, $id_zusatz_vom_Besucher);

Funktion erstellen um Session bei Seitenwechsel zu prüfen

Um es etwas einfacher zu machen, erstellen wir eine Funktion die den Nutzer auf jeder Seite anhand seiner Session überprüft.


session_check();

function session_check() // Funktion benennen
{
$sql = mysql_query("SELECT session FROM userdata WHERE session= '".$_GET['session']."'");
$data = mysql_fetch_assoc($sql);
// session wenn möglich anhand der session aus dem Link vergleichen 
if ($data['session'] != '')
{
echo '<meta http-equiv="refresh" content="5; URL=http://webadresse.de/">';
	// Wenn der Login fehlerhaft ist, kann auch auf eine Fehlermeldungsseite umgeleitet werden oder auch Ip und Anzahl in der Datenbank gespeichert werden 
}
else
{

	// alles ok. Hier auch die Möglichkeit die Seitenaufrufe für eine Statistik zu speichern.
	

}
// session ungleich session_db -> Benutzer kann ausgesperrt werden. Die Url Webadresse kann auch mit einer fehlerhaften Login Infoseite verlinkt werden.
}	

Vom Styling her wäre der Nachrichtentyp $message wie öfters im Script schon angewandt und dieser kann per echo ausgegeben werden. So kann die Nachricht direkt bei Eingabe empfangen werden.

Werbung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert