tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
497
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jul 2007
    Ort
    Quakenbrück
    Beiträge
    756
    Guten Morgen liebe Leute...

    Ich hab meine Web-Site fast fertig und möchte nun zum Abschluß noch die Seiten entsprechend meinem Rechtssystem sichern...
    Am liebsten würde ich das machen indem ich für jedes Recht ne File erstelle, womit ich die Rechte überprüfe und ggf den Zugriff auf die Seite verweigere...

    Die Seiten werden je nach Recht im Navi gezeigt/nicht gezeigt... Aber man könnte sie dennoch ohne entsprechendes Recht betreten, was ich ja verhindern will...

    Ich möchte aber auch nicht um jede Seite einzeln nen if...else-Baum legen...

    Ich brauch daher mal nen Gedankenanstoß, wie ich das realisieren könnte...
     
    PHP-Code:
    ($hilfe=='hilfreich') ? bewerten(positiv) : ignore_post(); 
    Schnellste Hilfe -> www.gidf.de

    Wer aus meiner Gegend kommt, kann sich gern mal melden, kenn hier keenen ;)

  2. #2
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Wichtig ist dass kein Zugriff erfolgen kann, ob nun ueber einen Link oder einen direkten Aufruf.
    Dafuer ist es wichtig im Script selbst die Rechte zu ueberpruefen, und nicht nur bei der Erstellung des Menues anhand der Rechte entscheiden ob der Link angezeigt werden soll oder nicht.

    Du kannst besser alle Links anzeigen und dann auf einzelnen Seiten lediglich "Access denied!" anzeigen lassen als das Menue zu filtern und dann Leute trotzdem auf die Seite zu lassen wenn sie den richtigen Link erraten.

    Bei meinem Management-System fuer EasyLFS an dem ich grad arbeite hab ich die Rechte in der Datenbank abgelegt. In den Scripts werden diese auf Konstanten abgebildet die dann dazu genutzt werden zu entscheiden ob Zugriff erfolgen darf oder nicht.
    Mal die Gruppenverwaltung als Beispiel:
    PHP-Code:
    if ((($projectno==0) && ($permissions PERM_GROUPS)) || (($projectno!=0) && ($permissions PERM_PROJ_GROUPS)))
        { 
    Wie Du siehst gibt es bei mir Rechte in 2 Stufen: Globale und projekt-bezogene Rechte. Jedes Recht setzt ein Bit. Die Gesamtrechte fuer einen User hole ich mit der folgenden Funktion:
    PHP-Code:
    function getpermissions($user,$project,&$multisql)
    {
        if (
    $user==false)
            {
                return 
    0;
            }
        
    $resultset=$multisql->getresultset();
        
    $multisql->query("select `grouppermissions`.`value` from `grouppermissions` join `groups` on `groups`.`id`=`grouppermissions`.`group` where `groups`.`id` in (select `group` from `usergroups` where `user`=".$user.") and `groups`.`project` in (0,".$project.")");
        
    $permissions=0;
        while (
    $userpermissions=$multisql->fetch_assoc())
            {
                
    $permissions|=$userpermissions['value'];
            }
        
    $multisql->setresultset($resultset);
        return 
    $permissions;

    Hier werden die globalen Rechte und die Rechte aus Gruppen zum jeweiligen Projekt zusammengesetzt.
    Da die Rechte binaer abgebildet sind ist dies ja kein Problem.

    Hier die von mir genutzten Rechte:
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    INSERT INTO `permissions` (`value`,`permission`,`constname`,`global`) VALUES
    (1,'Manage Site','PERM_SITE',TRUE),
    (2,'Manage Projects','PERM_PROJECTS',TRUE),
    (4,'Manage Groups','PERM_GROUPS',TRUE),
    (8,'Manage Menus','PERM_MENUS',TRUE),
    (16,'Manage Documents','PERM_DOCS',TRUE),
    (32,'Manage Project-Infos','PERM_PROJ_PROJECTS',FALSE),
    (64,'Manage Project-Groups','PERM_PROJ_GROUPS',FALSE),
    (128,'Manage Project-Menus','PERM_PROJ_MENUS',FALSE),
    (256,'Manage Project-Documents','PERM_PROJ_DOCS',FALSE),
    (512,'Manage Project-Packages','PERM_PROJ_PAKS',FALSE),
    (1024,'Manage Project-Files','PERM_PROJ_FILES',FALSE);

    God-Mode ist entsprechend 2047, dabei sind dann alle Bits gesetzt und somit voller Zugriff moeglich.
    Rechte werden bei mir nicht dem User zugeteilt, sondern einer Gruppe. Eine Gruppe kann wiederum einem Projekt zugeteilt sein oder eben auch nicht.
    Und natuerlich kann jeder User in mehreren Gruppen sein.
    Wie in der Funktion gezeigt ergeben sich die Rechte des Users dann eben aus den Rechten die er ueber die Mitgliedschaft in verschiedenen Gruppen hat, allen globalen Gruppen in denen er Mitglied ist und allen Gruppen des aktuellen Projekts in denen er Mitglied ist.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  3. #3
    Registriert seit
    Jul 2007
    Ort
    Quakenbrück
    Beiträge
    756
    Ich hab ja vor auf den Seiten auch nch mal seperat das Recht prüfen zu lassen... Aber ich möchte nicht unbedingt jeden Skript um mehr als ein include erweitern, um das Abfragen und prüfen der Rechte mit ner seperaten File zu machen...

    Spart mir auch arbeit, wenn ich für andere Projekte andere Rechte benutze

    Ach ja und ich bastel mein eigenes CMS mein erstes
    Geändert von Chaosengel_Gabriel (10.10.07 um 00:09 Uhr)
     
    PHP-Code:
    ($hilfe=='hilfreich') ? bewerten(positiv) : ignore_post(); 
    Schnellste Hilfe -> www.gidf.de

    Wer aus meiner Gegend kommt, kann sich gern mal melden, kenn hier keenen ;)

  4. #4
    Registriert seit
    Jul 2007
    Ort
    Quakenbrück
    Beiträge
    756
    Keine Idee, wie ich nen Skript unterbrechen kann, ohne if (x=a){}else{} um das bestehende Skript zu schreiben?
     
    PHP-Code:
    ($hilfe=='hilfreich') ? bewerten(positiv) : ignore_post(); 
    Schnellste Hilfe -> www.gidf.de

    Wer aus meiner Gegend kommt, kann sich gern mal melden, kenn hier keenen ;)

  5. #5
    GeneSys386 GeneSys386 ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Ort
    Salzburg, Österreich
    Beiträge
    50
    PHP-Code:
    if($no_permission)
    {
      die(
    "Sorry sir, don't wanna show ya the page.");

    Sowas? --> Ganz einfach auf jeder Seite ganz oben einfügen. Wenn der Benutzer keine Rechte besitzt die Seite anzuzeigen brichst du die Code-Ausführung mit die() ab.
     

  6. #6
    Julian Maicher Julian Maicher ist offline Mitglied Smaragd
    Registriert seit
    Jan 2004
    Ort
    Paderborn
    Beiträge
    1.210
    Machs dir doch nicht so schwer ..
    PHP-Code:
    if(!$loggedin) {
       
    header("Location: index.php?page=access_denied");

     

  7. #7
    Mohag Mohag ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bornhagen (Thüringen)
    Beiträge
    51
    Allso, ich kann da nur .htaccess zu sagen

    Lg Mohag
    Geändert von Mohag (12.10.07 um 13:47 Uhr)
     
    Einstein sagte einmal,

    wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden.

    Das ist Relativität.

  8. #8
    Registriert seit
    Jul 2007
    Ort
    Quakenbrück
    Beiträge
    756
    .htaccess schützt nur das Verzeichnis vor direktem Zugriff, aber nicht die Files darin vorm includen...

    Die idee mit em die() werd ich probieren, damit wirds schon werden...
    War mir nur nicht klar, wie ich mit einem Befehl das ganze Skript anhalten kann...
     
    PHP-Code:
    ($hilfe=='hilfreich') ? bewerten(positiv) : ignore_post(); 
    Schnellste Hilfe -> www.gidf.de

    Wer aus meiner Gegend kommt, kann sich gern mal melden, kenn hier keenen ;)

  9. #9
    GeneSys386 GeneSys386 ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Ort
    Salzburg, Österreich
    Beiträge
    50
    Zitat Zitat von Julian Maicher Beitrag anzeigen
    Machs dir doch nicht so schwer ..
    PHP-Code:
    if(!$loggedin) {
       
    header("Location: index.php?page=access_denied");


    Bitte aufpassen!

    Ein Header bricht nicht die Ausgabe ab ... hast du z.B. sensitiven Code hinterbei wird der immer noch angezeigt!

    PHP-Code:
    <?php
      header
    ("Location: http://localhost");
      echo 
    "VORSICHT! Ich bin immer noch sichtbar!";
    ?>
    zeigt folgenden Code an wenn man ihn über telnet ansteuert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    C:\Dokumente und Einstellungen\root>nc localhost 80
    GET /_sandkasten/security_test/header_secure.php HTTP/1.1
    Host: localhost
     
    HTTP/1.1 302 Found
    Date: Tue, 16 Oct 2007 11:04:55 GMT
    Server: Apache/2.0.54 (Win32) mod_ssl/2.0.54 OpenSSL/0.9.8 PHP/5.0.4 mod_autoindex_color
    X-Powered-By: PHP/5.0.4
    Location: http://localhost
    Content-Length: 38
    Content-Type: text/html
     
    VORSICHT! Ich bin immer noch sichtbar!

    Besser also

    PHP-Code:
    if(!$loggedin) {
       
    header("Location: index.php?page=access_denied");
       die();

     
    "Nichts tun macht nur dann Spass, wenn man eigentlich viel zu tun hätte."

Ähnliche Themen

  1. Binäres Rechtesystem
    Von Avedo im Forum PHP
    Antworten: 44
    Letzter Beitrag: 13.03.09, 15:16
  2. Rechtesystem PHP
    Von dark-staple im Forum Coders Talk
    Antworten: 3
    Letzter Beitrag: 24.07.08, 16:01
  3. Problem mit meinem Rechtesystem
    Von fanste im Forum PHP
    Antworten: 5
    Letzter Beitrag: 01.12.07, 18:17
  4. Rechtesystem mit Bits
    Von mukraker im Forum PHP
    Antworten: 2
    Letzter Beitrag: 07.03.04, 17:13