alpman: Autorisierungskonzepte

Hallo zusammen,

Ich verfolge zur Zeit folgendes Konzept für eine dynamische Internetseite:

Die Autorisierung basiert auf Sessions und es gibt eine Seite index.php, die ein HTML-Template verwendet. Dieses Template wird in Abhängigkeit vom jeweiligen Request (sowohl GET als auch POST) und vom Zustand der Autorisierung mit Inhalt gefüllt. Alle Benutzer (angemeldete und unangemeldete) "arbeiten" mit dieser Seite.

Wenn z.B. der Request index.php?cmd=players abgesetzt wird, bekommen angemeldete Benutzer eine Liste mit folgenden Links angeboten

Spieler auflisten
Spieler einfügen

Nicht angemeldete Benutzer bekommen nur den Link

Spieler auflisten

Grob gesagt ist der Code von index.php

  
...  
session_start();  
  
if($_SESSION['authenticated']) {  
 $log_flag = "li";  
} else {  
 $log_flag = "lo";  
}  
  
$cmd = $_REQUEST['cmd'];  
$id = $_GET['id'];  
  
switch($cmd) {  
 ...  
 case 'players':  
  $base['content'] = ListAllPlayers();  
  $navi = "players_navigation_".$log_flag;  
  // $base wird nachher ins Template eingefügt,  
  // ebenso der Inhalt von $navi  
  exit;  
 case 'iplayer';  
  $base['content'] .= BuildFormPlayerData();  
  $navi = "players_navigation_$log_flag";  
  break;  
 ...  
}  
...  

Nun gibt es auch Requests die Formulare aufbauen, die ein nicht angemeldeter Benutzer gar nicht zu sehen bekommen soll (und auch nicht bekommt, wenn er nur über die Links navigiert). Um zu verhindern, dass z.B. der über die Adressleiste eingebene Request index.php?cmd=iplayer ein Formular aufbaut, mit dem man einen Spieler in die Datenbank eintragen kann, frage ich in allen relevanten Funktionen (hier BuildFormPlayerData()) ab, ob der Benutzer angemeldet ist. Wenn nicht, geht es zurück auf index.php.

Was muss ich bei diesem Konzept sonst noch beachten? Was benutzt ihr für Autorisierungkonzepte, bzw. wie baut ihr eure dynamische Seiten auf?

Viele Grüße,

Stefan

  1. Warum fragst du an zentraler Stelle nicht ein einziges Mal ab, ob ein Benutzer angemeldet ist und leitest dann an den jeweiligen Inhalt um. Wenn du es bei jeder Seite in Form einer Funktion einzeln machst ist die Möglichkeit Fehler zu machen viel Größer als bei dieser Methode.

    Wenn du SESSION-IDs über die Adresszeile weitergeben willst würde ich die Login-IP mitspeichern und überprüfen, ob sie während der Session wechselt.

    1. hi,

      Wenn du SESSION-IDs über die Adresszeile weitergeben willst würde ich die Login-IP mitspeichern und überprüfen, ob sie während der Session wechselt.

      Das tät' ich lassen ...

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hello,

    vielleicht solltest Du dich auch mal mit dem OOP-Modell von PHP > 5.x beschäftigen.

    Die Wiedererkennung eines Clients und die Prüfung, ob dieser "angemeldet" ist, und welche Rechte, welchen Status er hat, würde in einem solchen Modell sicher in eine Basis-Schicht gehören, die grundsätzlich mit vererbt wird. Wenn dann einzelne Module von bestimmten User-Rechten abhängig sind, fragt man die entsprechenden Funktionen (Mehtoden) eben vorher ab.

    Wesentlich dabei ist, dass es für alle User gleichartig geregelt wird und tatsächlich bei jedem Request durchgeführt wreden muss. HTTP ist verbindungs- und zustandslos und kann sich daher keine Zustände merken. Das ersetzt man dann wieder durch die Session, in der die Parameter abgelegt werden können. Manche muss man aber in die Userverwaltung konsolidieren. In der Session bleiben nur diejenigen gespeichert, die flüchtig sein dürfen. Um auf einen definierten Zustand wieder aufsetzen zu können, muss man die "Etappenziele" in den Userdaten (Datenbank) sammeln. Anderenfalls würden sie bei Verfall der Session verloren gehen.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo Tom,

      Ich sehe schon, es liegt noch ein weiter Weg vor mir. Obwohl ich teilweise schon Klassen verwende habe ich noch nicht verstanden, wie ich Deinen Vorschlag umsetzen kann.

      Es gibt nicht zufälligerweise eine PHP Group in der Nähe von Mülheim an der Ruhr oder interessierte Leute aller Erfahrungsstufen, um eine zu gründen, so dass man sich mal treffen und austauschen könnte?

      Viele Grüße,

      Stefan

      1. Hello,

        Es gibt nicht zufälligerweise eine PHP Group in der Nähe von Mülheim an der Ruhr oder interessierte Leute aller Erfahrungsstufen, um eine zu gründen, so dass man sich mal treffen und austauschen könnte?

        Im Prinzip ist _die_ "PHP-Group" hier zu finden. Man muss nur die Postings mit den Angriffen konsequent ignorieren :-) Dann kann man hier wirklich _alle_ Fragen stellen.

        Es dauert aber eben etwas länger, als Du vielleicht gehofft hast.

        Ersten Fragen sollten sein:

        • Wer soll wofür autorisiert werden?
        • Soll ein applikationsübergreifendes Autorisierungssystem gebaut werden?
        • oder soll eine Applikation mit integriertem Autorisierungssystem gebaut werden?

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hallo Tom,

          Im Prinzip ist _die_ "PHP-Group" hier zu finden. Man muss nur die Postings mit den Angriffen konsequent ignorieren :-) Dann kann man hier wirklich _alle_ Fragen stellen.

          Die Sache ist ja, dass ich kein ausgebildeter Informatiker sondern Quereinsteiger bin. Mir fehlt also Hintergrundwissen um erstens die Fragen korrekt zu formulieren und zweitens die Antworten zu verstehen. Hier finde ich zwar wirklich kompetente Hilfe aber ich denke, dass eine Diskussion in der realen Welt auch mal fruchtbar ist. Lesen ist schön und gut, aber sich mal mit jemandem, der die Materie etwas mehr durchdrungen hat, am konkreten Beispiel zu unterhalten, fehlt mir.

          • Wer soll wofür autorisiert werden?

          Eine kleine Gruppe von Benutzern soll über eine Internetseite Änderungen an Datenbanktabellen vornehmen können (Einfügen, Löschen, Ändern).

          Für alle Besucher der Seite sollen Seiten generiert werden, deren Inhalte aus der Datenbank zusammengebaut werden.

          • Soll ein applikationsübergreifendes Autorisierungssystem gebaut werden?
          • oder soll eine Applikation mit integriertem Autorisierungssystem gebaut werden?

          Was ist denn da der Unterschied? Meinst Du im ersteren Fall ein allgemeingültiges Autorisierungssystem, was ich für die Applikationen hinter den Adressen www.kaufhierein.de und www.spielhiermit.com verwenden kann? Ist der zweite Fall der, dass ich für www.kaufhierein.de und www.spielhiermit.com ein eigenes, spezielles Autorisierungssystem zusammenschraube?

          Viele Grüße,

          Stefan

          1. Hello,

            • Soll ein applikationsübergreifendes Autorisierungssystem gebaut werden?
            • oder soll eine Applikation mit integriertem Autorisierungssystem gebaut werden?

            Was ist denn da der Unterschied? Meinst Du im ersteren Fall ein allgemeingültiges Autorisierungssystem, was ich für die Applikationen hinter den Adressen www.kaufhierein.de und www.spielhiermit.com verwenden kann? Ist der zweite Fall der, dass ich für www.kaufhierein.de und www.spielhiermit.com ein eigenes, spezielles Autorisierungssystem zusammenschraube?

            Ein Applikationsübergreifendes System setzt mindestens auf Dateisystem-Ebene und im OS an. Im Prinzip haben die Betriebssysteme sowas alle eingebaut, das eine eben ausführlicher als das andere.

            Z.B. "NOVELL NDS" versa "DOS Dateirechte"

            Die Applikation benötigt nun z.B. nur eine Schnittstelle zu dem bereits vorhandenen System.
            Dazu muss man aber die Benutzeridentifikation auch auf Systemebene durchführen können...

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hallo Tom,

              Ein Applikationsübergreifendes System setzt mindestens auf Dateisystem-Ebene und im OS an. Im Prinzip haben die Betriebssysteme sowas alle eingebaut, das eine eben ausführlicher als das andere.

              Naja, so "tief" muss ich nicht ansetzen :).

              Danke und viele Grüße,

              Stefan