Savemode und Admin-Interface

Ok danke snuu für die vielen Antworten Sie waren mir sehr hilfreich.

Könntest du mir bei folgenden System erläutern wie du ein Admin Interface aufbauen würdest (von den Links her, weil will nicht sagen für jede Funktion echo "<a href='newsposten.php'>News Posten</a>"; es scheint mir einfach zu unsicher.)

System:

Eine Userdatenbank -> Registrierung Access Level = 0 ( 0=Mitglied | 1=Admin | 2=Owner )

Dann setzte ich Cookies folgendermaßen (db Daten aus Sicherheitsgründen weggenommen):

Code:
<script language="php">
                        $DatabaseName = "";
                        $DbHostName = "";
                        $DbUserName = "";
                        $DbPassWord = "";
                        $db = mysql_connect("$DbHostName", "$DbUserName", "$DbPassWord");

                        $get_user = mysql_db_query("$DatabaseName", "SELECT nick,pw FROM user WHERE pw = '$pw' and nick = '$nick'");  
                        $num = mysql_num_rows($get_user); 
                        if ($num > 0) 
                        {  
                         for ($i=0; $i<$num; $i++)
                         { 
                          $nickname = mysql_result($get_user, $i, "nick");
                          $password = mysql_result($get_user, $i, "pw");
                         }
                         if ($pw == $password)
                          {
                           $user_eingeloggt = true;
                           setcookie("user_eingeloggt", $user_eingeloggt, time()+360000000); 
                           setcookie("password", $password, time()+360000000); 
                           setcookie("nickname", $nickname, time()+360000000);   
                          }
                        }
                        else
                        {
                         echo "User existiert nicht!";
                        }
                        mysql_close($db);
                        </script>

Auf der Seite frage ich dann quasi ab ob bei dem user in der db steht ob er 0,1 oder 2 hat. Dann schau ich nach ob er eingeloggt ist:

Code:
if (isset($user_eingeloggt))

1. entstehen mir dabei komische Cookie Fehler bei manchen Usern. Kann ich die Cookies besser lösen ? Session dürfte mich ja dabei auch nicht sonderlich weit bringen, da es ja nur solange der Browser auf ist gilt oder?

2. Weiss ich nicht wie ich es jetzt ausführen soll ohne dabei immer die genauen Links anzugeben. Denn die sollen wenn möglich den Usern verborgen bleiben um eventuelle Fremdzugriffe zu verhindern. Blos wie geht dies oder gibts dort noch eine sichere Variante ?

Ich würde mich sehr freuen wenn du mir da weiter helfen könntest, da ich sehe du bist ein sehr kompeteten PHP Künstler ;)
 
Umschließe bitte in SQL-Abfragen die Variablen mit [phpf]mysql_escape_string[/phpf], die alphanumerische Felder einschränken. Im Falle deiner SQL-Abfrage betrifft das die Variablen $pw und $nick.

Du musst irgendwo definieren, welche Module Admin-Module sind. Die Links zu den Admin-Modulen dürfen nur angezeigt werden, wenn der eingeloggte Nutzer auch wirklich administrative Rechte besitzt.

Wenn du den Nutzer-Status "Owner" verwenden möchtest, müsstest du zusätzlich definieren, welches Modul welchem Nutzer gehört.

Zudem würde ich niemals Passwörter im Klartext in der Datenbank ablegen, sondern nur den Hash-Wert. Siehe dazu: [phpf]md5[/phpf] Bei der Prüfung des Passwortes vergleichst du einfach den md5-Hash des übergebenen Passworts mit dem Hash-Wert in der Datenbank. Auch würde ich niemals das Passwort im Klartext im Cookie ablegen.

Dein Handling nach der SQL-Abfrage ist überflüssig.Da du bereits in der SQL-Abfrage Nutzername und Kennwort einschränkst und der Nutzername hoffentlich eindeutig ist, wird entweder 1 Datensatz zurückgeliefert oder keiner. Kommt einer zurück, waren Nutzername und Kennwort korrekt. Die Anzahl der Datensätze bekommst Du über [phpf]mysql_num_rows[/phpf]

Sven
 
Also danke ersteinmal im Voraus für all die genannten Tipps.

Ich habe mir all die genannten Links alle einmal angeschaut bzw. durchgelesen. Doch ehrlich gesagt sind es finde ich nur Tipps am Rande und helfen mir mit der Lösung meines Problemes nicht richtig weiter.

Zu den Modulen. Was genau sind Module und wie kann ich mir ihren Aufbau vorstellen bzw. wie benutze ich Sie ? Tut mir leid aber ich habe noch nichts davon gehört und auch noch nicht mit Modulen gearbeitet. Ich habe bisher nur Grundbausteine des PHP Codings benutzt wie Schleifen und simple Abfragen einer Datenbank. Halt noch nichts weltbewegendes. Könntest du mir eventuell einen Codebeispiel oder etwas ähnliches hier pasten wo ich mal dran nachvollziehen kann, wie man soetwas etwa macht ?

Zu mysql_escape_string(). Ich habe es mir durchgelesen, jedoch ehrlich gesagt habe ich nichts zur Verwendungsweise noch zum Verwendungszweck rausgefunden in dem Text dort. Kannst du auch hier eventuell mal etwas tiefer in die Materie eingehen ?

Zu den Cookies. Also sind meine Cookies im Grunde nicht flasch sondern, ich sollte Passwörter einfach nicht offen in eine Datenbank speichern und ebenso nicht in Cookies ablegen, sondern diese bei der Eingabe einfach verschlüsseln und mit dem in der Datenbank befindlichen Passwort vergleichen richtig?

Nur dann verstehe ich nicht wieso bei manchen Usern Cookie Probleme auftreten und diese erst die Cookies löschen müssen und sich neu einloggen, um die Fehler zu beseitigen. Und auf die Dauer sollte das schon ein wenig nervig sein für meine Besucher?

Ich würde mich über eine kurzfristige Antwort sehr freuen, da es sehr Zeitknapp wird mit dem Release der Liga :)

MfG 2Pac
 
Zuletzt bearbeitet:
Mit Modulen meine ich einfach nur die Funktionen, die du den Nutzern zur Verfügung stellen willst.

Hier ein Beispiel für [phpf]mysql_escape_string[/phpf]:
PHP:
$get_user = mysql_db_query("$DatabaseName", "SELECT nick,pw FROM user WHERE pw = '".mysql_escape_string($pw)."' and nick = '".mysql_escape_string($nick)."'");
Ansonsten könnte man als Passwort oder Nutzername einfach folgendes übergeben:
Code:
' or '1'='1
und man wäre angemeldet. Das nennt man auch SQL-Injection.

Sven
 
Ok das habe ich jetzt verstanden, aber irgendwie verstehst du meine Frage nicht :)

Ich wollte gerne wissen wie ich ein Admin Menü von den Links her aufbaue. Das ich Abfrage, ob ein Admin gerade zugreift mache ich ja durch die Datenbank ob Access = 1 ist oder auch 2 (da 2 = Owner).

Aber ich will weder das dort in der Adressleiste ein http://www.meinedomain.de/seite.php?id=2 steht noch dass ich ein Menü so aufbauen muss:

Code:
echo "<a href='news.php'>News Schreiben</a><br>";
echo "<a href='newsedit.php'>News Editieren</a><br>";
echo "<a href='newsdelete.php'>News Löschen</a><br>";
echo "<a href='newskathinzufugen.php'>News Kategorie hinzufügen</a><br>";
Verstehst du was ich meine? Ich will keine festen Links ausgeben, weil wenn die jemand gesehen hat kann er ohne weiteres drauf zugreifen, wenn ich mal nicht schnell genug war mit den Adminstatus löschen etc.

Und das muss ich ja irgendwie umgehen können ? Z.b. nur Einblenden der Domain http://www.meinedomain.de überall egal auf welchen Links ich bin, oder stellt man das beim Anbieter des Spaces ein?

Zudem muss es doch eine andere Übergabe von Informationen als per direkt erzeugten Links geben, welche ich benutzen kann?

Ich hoffe meine Frage/Anliegen ist jetzt deutlich geworden.

Aber trotzdem ein ganz ganz dickes Dankeschön für all die Mühe die du dir gibst mir all die Sachen zu erklären , soviel Geduld und Zeit hat nicht jeder :)

MfG 2Pac
 
Wie ich dir bereits gesagt habe: Du musst irgendwo definieren, welchge Links du hast und wer sie zu Gesicht bekommen darf. Das was Du als Links bezeichnest, habe ich als "Modul" bezeichnet. Du geht deine Liste mit Links durch und prüfst, ob diese nur durch einen Admin gesehen werden dürfen oder durch jeden. Ist der aktuelle Nutzer ein Admin, dann zeigst du den Link an. Um sicherzustellen, dass kein unberechtigter Nutzer einen Link aufruft, den er nicht aufrufen darf, musst du dennoch in den PHP-Dateien, die verlinkt sind, prüfen, ob der aktuelle Nutzer Admin ist oder nicht. Wenn nicht, zeigt das Script nicht das an, was ein Admin zu sehen bekommen würde.

Sven
 
Zurück