Mit PHP aus Unterordner inkludieren?

09/24/2013 01:16 Th33xitus#1
Moin!

Ich habe da mal eine Frage, wie ich am elegantesten folgendes Problem lösen kann:

Also ich habe einen definierten Bereich für den Content auf der index.php.
Den Content inkludiere ich über folgendes:

HTML Code:
<!-- HIER WIRD DIE JEWEILIGE CONTENT PHP-DATEI INKLUDIERT -->
    <div id="content">
        <?php
                    if (isset($_GET['site']))
                    { include('site/'.$_GET['site'].'.php');}
                    else { include('site/home.php');}
            ?>
    </div>
<!-- HIER ENDET DIE INKLUDIERUNG -->
Das heißt, wenn ich jetzt z.B auf den Link "Impressum" in meiner Navigation klicke, dass der Header und Footer gleich bleiben, lediglich der Inhalt der impressum.php in das div für den content eingefügt wird.

Die Lösung mit dem &_GET['site'] setzt allerdings voraus, dass alle Seiten die ich inkludieren will im Verzeichnis "site" sind wie es mir scheint.

Jetzt möchte ich allerdings auch Seiten inkludieren aus einem Unterverzeichnis von site.
Also beispielsweise aus dem Verzeichnis cat die datei abc.php
(../site/cat/abc.php)

Ich hab null Plan wie ich das anstellen soll das es ordentlich geht, denn was PHP angeht benutze und lerne ich eigentlich größtenteils nur mit snippets ^^


mfg
09/24/2013 01:25 .StarSplash#2
Eine andere Lösung, als das Verzeichnis vorher mit PHP zu durchlaufen und die gefundenen (.php)Dateien mit Pfadangabe in ein Array zu schreiben und dann im Inklude auf dieses zurückzugreifen fällt mir so spontan nicht ein, damit sollte es aber in jedem Falle gehen.
09/24/2013 01:28 tolio#3
../ voranschreiben sollte klappen
09/24/2013 07:45 .Tear#4
hat nix mit dem Thema zu tun aber bitte sicher die GET Variable noch ab..
09/24/2013 07:49 mhaendler#5
Es gibt verschiedene Möglichkeiten wie du das ganze realisieren kannst:

1. Ein Array mit allen Pfadangaben für die Seiten und du holst dir einfach den "Key" über das Get und greifst damit auf den Value des Arrays zu.

PHP Code:
$array=('abc' => 'site/cat/abc.php'); include($array[$_GET['site']]); 
Allerdings glaube ich bei dir liegt es nicht an der Art wie du das ganze includierst sondern eher an dem Problem mit der Pfadangabe kann das sein?

Pauschal kann man es so sagen:

[..] <- Das bedeutet du möchtest in das Verzeichnis einer höheren Ebene
[./] <- Das bedeutet du möchtest in dem selben Verzeichnis etwas öffnen
[../img] <- Du möchtest im übergeordneten Ordner den Ordner img öffnen

EIne besonderheit des aktuellen Ordners ist du musst kein ./ angeben das heißt (man geht immer) von dem aktuellen Skript aus (also wo es liegt)

Du möchtest in den Ordner "Site": /site
Du möchtest dort im Ordner "Site" in den Ordner "Cat": /site/cat
Du möchtest im Ordner Cat die Datei "abc.php" öffnen: /site/cat/abc.php

Hoffe ich konnte dir bei deinem Problem helfen, falls ich etwas falsches gesagt habe weißt micht bitte hin, denn auch ich mache Fehler
09/24/2013 15:11 Th33xitus#6
Danke schon einmal an alle Antworten.
Ich werde einige Sachen versuchen und mich dann noch einmal zurückmelden ob es geklappt hat oder nicht :)

Quote:
Originally Posted by .Tear View Post
hat nix mit dem Thema zu tun aber bitte sicher die GET Variable noch ab..
Danke für den Tipp!
Wie mache ich das am besten?

mfg
09/24/2013 15:29 mhaendler#7
Quote:
Originally Posted by Th33xitus View Post
Danke schon einmal an alle Antworten.
Ich werde einige Sachen versuchen und mich dann noch einmal zurückmelden ob es geklappt hat oder nicht :)


Danke für den Tipp!
Wie mache ich das am besten?

mfg
Stichwort Whitelist! Du definierst in (z.B.) nem Array die erlaubten GET-Parameter (in deinem Fall wohl die Seitenaufrufe), die Du beim Seitenaufruf abprüfst, ob die in dem Array enthalten sind. Wenn nicht -> Fehler oder eine 404 Seite :)
09/25/2013 00:02 Synatex#8
Ohne Whitelist, generelles absichern der Parameter:

PHP Code:
    function CleanParam($param)
    {
        
$param trim($param);
        
        
/**
         * Gesamelltes Replacen:
         *     .         - Gegen Local File Inclusion, damit dir niemand auf die Dateien zugreift
         *     /         - Ebenfalls wie oben
         * '        - Gegen SQLInjection um das rumtricksen zu vermeiden
         * "        - Ebenfalls gegen SQLi
         * < >        - HTML bullshit raus den man für XSS nutzen könnte
         *             + Sämtliche ASCIIZeichen für die einzelnen Werte da die PHP etwas anders interpretiert und somit
         *              das gleiche möglich wäre wie die normale Schreibweise
         * chr(00)    - Gegen poison 0-byte (splittet den String und hört mitm request auf..)
         */
         
        
$param str_replace(array('.','/','\'','"','<','>'),''$param);
        
$param str_replace(array(chr(47),chr(46),chr(00),chr(39),chr(60),chr(62),chr(34)),''$param);
        return 
$param;
    } 
Benutze ich nun schon seit längerem und habe mich ab und zu immer mal wieder Schwerpunktmäßig informiert und sollte die Standardattacken soweit abhalten.