Logins für meine HP

Hi Leute arbeite eigentlich seit dem ich PHP ein wenig verstehe immer nur mit If und so.
Aber jetzt würde ich mal gerne ein Loginsystem für meine HP basteln.

Es soll ganz einfach sein. Wenn man einen User anlegt solln der USERNAME UND DAS Passwort in die Datei User geschrieben werden, wo Sie später nach dem Login auslesen werden solln. Natürlich soll das Passwort md5 verschlüsselt abgespeichert werden.

Als zweites soll eine neu Datei angelegt werden, mit dem Namen des Users. In diese Datei werden Später die Punkte des Users geschrieben, die er durch aktivitäten auf meiner HP bekommt.

Ich hoffe ihr versteht was ich meine ansonst fragt doch einfach bitte nach.

lg david

Hi Leute arbeite eigentlich seit dem ich PHP ein wenig
verstehe immer nur mit If und so.

Dann bin ich der Meinung, solltest Du Dich erstmal durch PHP-Tutorials wühlen und Programmieren lernen, bevor Du Dich an schwierigere Dinge wagst.

Ausser http://php.net/ fallen mir jetzt keine URLs ein, das benutze ich nur noch als Referenz, aber das ein oder andere PHP-Tutorial zu finden, sollte wohl möglich sein.

Aber jetzt würde ich mal gerne ein Loginsystem für meine HP
basteln.

Dazu brauchst Du dann Sessions.

Es soll ganz einfach sein.

Es ist aber nicht ganz einfach :smile:

Ich hoffe ihr versteht was ich meine ansonst fragt doch
einfach bitte nach.

Eigentlich ist es umgekehrt, denn Dein Posting hat keine Frage enthalten und Programmierarbeit werden die wenigsten für Dich übernehmen wollen. :smile:

Viel Erfolg,
-Efchen

Ja, ich würde auch erst einmal leichtere Sachen ausprobieren, aber wenn du unbedingt ein Login-Script haben willst, dann solltest du dich mit folgendem beschäftigen:

  1. mySQL
  2. $_SESSION
  3. md5() und salt

Ich weiß ja nicht, wie gut du dich mit PHP auskennst, aber man sollte zumindest aus dem FF die Übergabe der Variablen (POST / GET) kennen, um so ein Script zu schreiben.

zu 1.: Ich würde nicht in eine Datei schreiben, sondern in eine Datenbank. Das ist flexibler und etwas sicherer.

zu 2.: Sessions angucken und können, ansonsten wird das nichts.

zu 3.: Da md5 Hash keine richtige Sicherheit bietet, würde ich wenigstens mit salt arbeiten. Das heißt, dass du zu dem md5 generierten Passwort ein md5 generiertes salt und ein md5 generierten Username hinzufügst.

Das ganze sieht in etwa so aus:

Eingabemaske des Passworts und Benutzernamens

Benutzernamen:

Password:

Prüfung des Benutzernamens und Passwort

<?php $user=$_POST['user'];<br />$pw=$\_POST['pw'];

include("./datenbank/connect.php");
 
$abfrage\_salt="SELECT \* FROM `login` WHERE `User`='$user'";
$ergebnis\_salt=mysql\_query($abfrage\_salt);

if($row1=mysql\_fetch\_assoc($ergebnis\_salt))
{
 $salt=$row1["Salt"];
}
else
{
 $salt="Falsches Salz";
}
$password\_hash=hash\_generator($pw, $salt, $user);

$abfrage\_auslesen="SELECT \* FROM `login` WHERE `User` LIKE '$user' AND `PW` LIKE '$password\_hash'"; 
$ergebnis\_auslesen=mysql\_query($abfrage\_auslesen); 

if($row2=mysql\_fetch\_assoc($ergebnis\_auslesen))
{
 $\_SESSION["User"]=$row2["User"];
 $\_SESSION["PW"]=$row2["PW"];
 $\_SESSION["Login"]=true;

 echo "hier muss der inhalt für eingeloggte hin";

 include("./login/login\_log.php");
}
else
{
 echo "

Sie konnten sich nicht einloggen!";  
 echo " ";  
}  
  
include("./datenbank/disconnect.php");  
  
// ################## Password ##################  
function hash\_generator($password, $salt, $benutzername)  
{  
 $pw\_hash=md5($password.$salt.$benutzername);  
 return $pw\_hash;  
}  
?\>

Eingabemaske um einen User mit Passwort anzulegen:

Benutzername:

Password:

Script das den Benutzer und das Passwort in die mySQL Datenbank hinzufügt und ein md5 Hash mit salt erzeugt:

<?php $user=$_POST['user'];<br />$pw=$\_POST['pw'];

$salt=salt\_generator();
$password\_hash=hash\_generator($pw, $salt, $user);

if(empty($user) OR empty($pw))
{
 echo "Bitte geben Sie alle Daten ein!";
}
else
{
 // ################## Datenbankeintrag der Userdaten ##################
 include("./../datenbank/connect.php");

 $abfrage\_namevorhanden="SELECT \* FROM `login` WHERE `User`='".$user."'";
 $ergebnis\_namevorhanden=mysql\_query($abfrage\_namevorhanden) OR die("Fehler: ".mysql\_error());

 if(mysql\_num\_rows($ergebnis\_namevorhanden))
 {
 while($row=mysql\_fetch\_assoc($ergebnis\_namevorhanden))
 {
 echo $row['User']." existiert bereits!
";
 }
 }
 else
 {
 mysql\_query("INSERT INTO `login` (`ID`,`User`,`PW`,`Salt`)
 VALUES (NULL , '$user', '$password\_hash', '$salt');")
 or die("Der Datenbankbefehl konnte nicht ausgeführt werden: ".mysql\_error());
 include("./../datenbank/disconnect.php");

 echo "Benutzer: ".$user." wurde erfolgreich angelegt.";
 }
}

// ################## Salt ##################
function salt\_generator()
{
 // substr - gibt einen Teil des Strings zurueck
 // rand() - generiert zufaellige Zahlen
 // uniqid - gibt eine eindeutige ID zurueck, die durch die aktuelle Zeit in Millisekunden generiert wird

 $salt\_db=substr(uniqid(rand()),2,10);
 return $salt\_db;
}
// ################## Password ##################
function hash\_generator($pw, $salt, $user)
{
 $pw\_hash=md5($pw.$salt.$user);
 return $pw\_hash;
}

?\>

was ist denn salt?

$pw_hash=md5($password.$salt.$benutzername);

Hallo,

mir haben sich 2 Fragen aufgetan:

  1. Was ist denn dieses Salt? Was hat es damit auf sich?
  2. Warum generierst du aus 3 Bestandteilen den Hash? Aus dem Passwort allein reicht es doch…

Ajo

Hi Ajo,

$pw_hash=md5($password.$salt.$benutzername);

mir haben sich 2 Fragen aufgetan:

  1. Was ist denn dieses Salt? Was hat es damit auf sich?

MD5 ist unsicher (besonders bei kurzen einfachen Passwörtern), wenn man keinen Salt verwendet - also das Passwort direkt mit md5 hasht, anstatt es noch mit einer willkürlichen Zeichenfolge zu salzen. Ich würde eher zu sha1 tendieren, das ist sicherer.

  1. Warum generierst du aus 3 Bestandteilen den Hash? Aus dem
    Passwort allein reicht es doch…

Nein, tut es nicht - der Code ist schon ok so. Der Hash eines einfachen Passworts lässt sich sonst von Angreifern über Rainbow-Tables zurückkodieren. Mit nem Salt wird das schwierig, besonders wenn dieser lang ist und Sonderzeichen enthält.

Ciao
Rudy