Zugriff auf Seiten verhindern

  • Hallo liebe Experten.

    Ich bräuchte euren Rat bezüglich folgenden Problems:
    Ich schreibe ein kleines eigenes cms (bevor wieder die üblichen Sachen wie "gibts doch schon zur Genüge" oder "schon wieder einer..." kommt: es dient zuallererst der eigenen Übung und dem Ausbau von Fähigkeiten in php, also bitte nicht schimpfen.), und ich sitze gerade über dem Thema Sicherheit.
    Ich habe bereits einen recht sicheren Login geschrieben, welcher den Aufruf der Index.php nur mit dem richtigen Passwort zulässt (alle anderen Seiten werden in die index.php per get-parameter includet). Nun kann man aber die includeten Seiten noch einzeln aufrufen, was natürlich nicht sein darf. Ich frage mich nun, was ich dagegen tun kann. Spontan ist mir da .htaccess mit mod-rewrite eingefallen, aber ich bin mir unsicher, ob das
    1. wirklich sicher ist und
    2. obs nicht eine einfachere Lösung (mit php?) gibt, da es recht umständlich ist, für jeden möglichen Link einen mod-rewrite Befehl zu definieren.

    Es sind also eure Meinungen und Vorschläge gefragt.
    Ich sage schon mal Danke und freue mich auf Hinweise, Ideen, Links (ja, ich bin auch für gute Links zum Thema dankbar, ich lerne gerne).

    Gruß, euer
    Jojo

    //EDIT
    Eben kam mir folgende Idee, welche auch zu funktionieren scheint: die if -Abfrage zur korrekten session-id, welche ich auch für den inlcude in der index.php benutze, kann ich ja auch in jede einzelne Seite extra mit einfügen. Ist halt auch recht umständlich, klappt aber. Aber immer noch die Frage: Ist das sicher? Gehts auch einfacher?


  • Ich mache das auch immer mit if-Abfragen und der SessionID, würde mich auch mal interessieren ob es da eine einfacherere Möglichkeit gibt, die auch sicher ist

    Man muss nicht verrückt sein um mit mir befreundet zu sein...
    ABER es hilft!!!

  • 2 Möglichkeiten

    1. Das Include-Verzeichnis per htaccess schützen
    2. Das Include-Verzeichnis außerhalb des Document-Root anlegen, so dass es erst garnicht per http aufgerufen werden kann

  • 3:
    In der index.php eine Konstante definieren.
    In den einzelnen Include Seiten auf Existenz der Konstante prüfen. Wenn sie nicht existiert, dann die()

    Sieht so aus:

    index.php

    PHP
    <?php
       define('THIS_CONTANT_PROHIBITS_ACCESS_ON_INCLUDEFILES', NULL);
       ......
    ?>

    eine Includeseite

    PHP
    <?php
       if (!defined('THIS_CONTANT_PROHIBITS_ACCESS_ON_INCLUDEFILES')){
          die();
       }
    ....
    ?>

    Natürlich kann man das ganze noch sicherer machen, wenn man a) Nummer 1 befolgt oder b) erst gar nicht included :P

  • Zitat von phpfan

    2 Möglichkeiten

    1. Das Include-Verzeichnis per htaccess schützen
    2. Das Include-Verzeichnis außerhalb des Document-Root anlegen, so dass es erst garnicht per http aufgerufen werden kann

    2. Klingt ineressant. Wie greife ich denn dann darauf zu? Btw. wie referenziere ich auf Dateien ausserhalb des Documentroot ?

    No0ob: wäre das nicht dasselbe, was ich bereits mit dem Überprüfen der $_SESSION['userid'] gemacht habe?


  • Zitat von jojo87


    2. Klingt ineressant. Wie greife ich denn dann darauf zu? Btw. wie referenziere ich auf Dateien ausserhalb des Documentroot ?


    Einfach relativen oder absoluten Pfad nehmen. PHP ist es wurscht, ob die Datei unterhalb von Documentroot liegt oder nicht.