Jnnbo: Include-Dateien

Moin,

heute mal eine Frage zu PHP. Ich arbeite mit Include-Dateien. Die heißen z.B. inc.header.php damit weiß ich, dass diese Datei eingebunden wird. Derzeit sieht mein Verzeichnis auf dem Server so aus (Ausgangspunkt ist der Ordner HTML, an dem kann ich auch nichts ändern)

img include js css

Im Ordner "img" liegen meine Bilder und alles was zum Design gehört. Im Ordner "include" liegen Dateien für Funktionen und Classen sowie einige Bibliotheken. Im Ordner "js" liegen alle Javascript Dateien wie etwa jQuery. Im Ordner "css" liegen meine CSS Dateien.

Dateien wie z.B. "index" oder "impressum" liegen direkt im Ordner "html" Bis jetzt habe ich meine Include-Dateien auch mit im Ordner "html" liegen. Allerdings wenn jemand den Namen kennt, kann er diese direkt aufrufen.

Daher meine Frage, ist es Sinnvoll die Dateien auch mit in den Unterordner "include" zu legen und kann ich irgendwie verhinder, dass diese Dateien nicht direkt aufgerufen werden können?

  1. Daher meine Frage, ist es Sinnvoll die Dateien auch mit in den Unterordner "include" zu legen

    Das würde verhindern dass man auf sie zugreifen kann, natürlich nur sofern der include Pfad nicht auch irgendwie erreichbar ist.

    und kann ich irgendwie verhinder, dass diese Dateien nicht direkt aufgerufen werden können?

    Durch die htaccess Datei geht das auch, ich weiß nicht wie aber Suche nach "htaccess deny access to certain files" bringt einige Treffer die nicht kompliziert aussehen.

    1. Hallo,

      Daher meine Frage, ist es Sinnvoll die Dateien auch mit in den Unterordner "include" zu legen Das würde verhindern dass man auf sie zugreifen kann, natürlich nur sofern der include Pfad nicht auch irgendwie erreichbar ist.

      erreichbar ist ja alles innerhalb von "html" oder müsste ich vielleicht einen Ordner anlegen der "rjriojgsdgi0tgj5484gdfg" heißt? Denn auf so einen Namen wird keiner kommen :) Eine Suchmaschine bekommt von einem iclude-Pfad ja nichts mit oder?

  2. heute mal eine Frage zu PHP. Ich arbeite mit Include-Dateien. Die heißen z.B. inc.header.php damit weiß ich, dass diese Datei eingebunden wird.

    Bis jetzt habe ich meine Include-Dateien auch mit im Ordner "html" liegen. Allerdings wenn jemand den Namen kennt, kann er diese direkt aufrufen.

    Ob das ein Problem ist, hängt davon ab, was in diesen Dateien drinsteht. Da ihre Namen auf .php enden, werden sie zumindest schon mal nicht als Quelltext ausgegeben, sondern durch den PHP-Interpreter verarbeitet. Es werden also keine Interna (Zugangsdaten für andere Dienste, Dateipfade) ausgeplaudert, im schlimmsten Falle sieht der Neugierige Bruchstücke einer Seite, die er auf "offiziellem" Wege im Ganzen zu sehen bekommen würde. Hast du in den Include-Dateien darüber hinaus lediglich Funktionen stehen, wird im Browser bei ihrem Aufruf gar nichts erscheinen.

    Insofern: Enden die Dateien auf .php, stellen sie grundsätzlich kein Sicherheitsrisiko dar.

    Daher meine Frage, ist es Sinnvoll die Dateien auch mit in den Unterordner "include" zu legen

    Ob sie in einem separaten Ordner liegen, ist, für sich genommen, völlig unerheblich –  "seitenteile.inc.php" ist so leicht oder schwer zu (v)erraten wie "include/seitenteile.inc.php". Ein eigener Ordner könnte gar noch problematischer werden, nämlich dann, wenn man dem Webserver erlaubt, das Inhaltsverzeichnis des Ordners auszugeben und damit die Namen sämtlicher internen Dateien.

    Aber …

    und kann ich irgendwie verhinder, dass diese Dateien direkt aufgerufen werden können?

    Beim Apache-Webserver kannst du mittels <FilesMatch>-Block und Deny Dateien nach einem Namensmuster für die Auslieferung sperren. Andere Webserver bieten Ähnliches.

    Deine Überlegung, die Dateien in einen eigenen Ordner zu packen, hat in dieser Hinsicht den Vorteil, dass du kurzerhand mit einer Einzeiler-.htaccess den ganzen Ordner per Deny sperren kannst. Das ist wohl die einfachste und sicherste Methode.

    1. Hi,

      Beim Apache-Webserver kannst du mittels <FilesMatch>-Block und Deny Dateien nach einem Namensmuster für die Auslieferung sperren. Andere Webserver bieten Ähnliches.

      Klasse Idee.

      order deny,allow
      deny from all
      allow from 127.0.0.1
      

      wieder was gelernt. :-) Natürlich sollte man es auch erlauben. AllowOverride All dachte das wäre default :-|

      Viele Grüße aus LA

      --
      ralphi
  3. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

    ja!

    heute mal eine Frage zu PHP. Ich arbeite mit Include-Dateien. Die heißen z.B. inc.header.php damit weiß ich, dass diese Datei eingebunden wird. Derzeit sieht mein Verzeichnis auf dem Server so aus (Ausgangspunkt ist der Ordner HTML, an dem kann ich auch nichts ändern)

    img include js css

    und kann ich irgendwie verhinder, dass diese Dateien nicht direkt aufgerufen werden können?

    Alles, was von einem aktiven Backend (also hier PHP) eingebunden werden kann, sollte gar nicht innerhalb der Document Root liegen, sondern darüber

    domain ---+--- htdocs -+-- document1 (File)           |            +-- document2 (File)           |            +-- ...           |            +-- images (Dir)           |           +--- data (Dir)           +--- includes (Dir)           +--- logs (Dir)           +--- sessions (Dir)           +--- tmp (Dir)

    So ungefähr könnte die Struktur aussehen. Und wenn <USER>/domain/htdocs/ dann die  Document Root für die Domain darstellt, lässt der Apache auch niemanden direkt an die darüberliegenden Verzeichnisse heran.

    Spirituelle Grüße Euer Robert

    --
    Möge der Forumsgeist wiederbelebt werden!
    1. Alles, was von einem aktiven Backend (also hier PHP) eingebunden werden kann, sollte gar nicht innerhalb der Document Root liegen, sondern darüber

      domain ---+--- htdocs -+-- document1 (File)           |            +-- document2 (File)           |            +-- ...           |            +-- images (Dir)           |           +--- includes (Dir)

      Grundsätzlich sicher die beste Lösung, jedoch bei PHP oftmals nicht anwendbar, weil Serverbetreiber den Spielraum von PHP mittels open_basedir auf das htdocs-Verzeichnis einschränken. Aber Versuch macht natürlich kluch …

      1. hi,

        Grundsätzlich sicher die beste Lösung, jedoch bei PHP oftmals nicht anwendbar, weil Serverbetreiber den Spielraum von PHP mittels open_basedir auf das htdocs-Verzeichnis einschränken. Aber Versuch macht natürlich kluch …

        Datei verstecken, Punkt vornedran, so liefert der Apache die Datei mit Status 403 Forbidden aus.

        MfG

      2. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

        ja!

        Alles, was von einem aktiven Backend (also hier PHP) eingebunden werden kann, sollte gar nicht innerhalb der Document Root liegen, sondern darüber

        domain ---+--- htdocs -+-- document1 (File)           |            +-- document2 (File)           |            +-- ...           |            +-- images (Dir)           |           +--- includes (Dir)

        Grundsätzlich sicher die beste Lösung, jedoch bei PHP oftmals nicht anwendbar, weil Serverbetreiber den Spielraum von PHP mittels open_basedir auf das htdocs-Verzeichnis einschränken. Aber Versuch macht natürlich kluch …

        Dann muss der Serverbetreiber aber halbverblödet sein. Das ist doch gerade die Einstellung, die es bei Verwendung des PHP-Moduls für Apache ermöglichen soll, eine sinnvolle Struktur bereitzustellen.

        @hotti: Bist Du sicher, dass das Verstecken mit vorangestelltem Punkt reicht bei Standardeinrtichtungen. Muss man da nicht die Standardvorsilbe ".ht" nehmen?

        Spirituelle Grüße Euer Robert

        --
        Möge der Forumsgeist wiederbelebt werden!