Philipp Hasenfratz: PHP Code ausführen bei "geparstem Template"

Beitrag lesen

Halihallo Antje

das klingt interessant, kannst Du mir das genauer erklären?

Über eine Variable im PHP-Script wird ja festgelegt, welches Template
eingelesen werden soll. Nennen wir diese Variable mal $tstrPageId.
Dann hast du zwei Typen von Templates:

a) enthält PHP-Code und kann so mit include_once ausgeführt werden.
b) enthält reines HTML und kann so einfach über Dateioperationen
   eingelesen werden und ausgegeben werden.

Jetzt musst du nur prüfen, ob das Template in $tstrPageId PHP-Code
enthält oder nicht (bitte jetzt nicht mit irgendeiner
RegularExpressen kommen, denn dies wäre vielzuviel overhead). Ich
würde dies über einen assoziatives Array lösen. Existiert der
Schlüssel $pagesWithPhp[$tstrPageId], dann wird include_once
ausgeführt. Falls du dies nicht über ein Array lösen kannst, würde
ich der Einfachheit einfach empfehlen alles (wenn auch kein PHP
enthalten) über include_once einzubinden.
Das $pagesWithPhp Array musst du natürlich manuell pflegen. Kommt
ein PHP-Script hinzu, musst du es dort "registrieren", sodass dein
loader-Script weiss, dass es dieses über include_once einbinden soll.

Aussehen tut dies dann etwa so:

if (isset($pagesWithPhp[$tstrPageId]) {
  include_once( $tstrPageId );
} else {
  echo(file_get_contents($tstrPageId));
}

Sei nur verdammt vorsichtig mit diesem $tstrPageId, so wie es hier
steht liessen sich auch Dateien ausgeben, die der Angreifer nicht
sehen sollte (.htusers). Am besten du erstellst auch hier ein Array
mit gültigen PageId's (also Dateinamen oder Id's auf das Template).
Falls $tstrPageId nicht als Schlüssel vorkommt, gibst du eine
Fehlermeldung alla 404-er aus (Ressource not found).

Viele Grüsse

Philipp

--
The only program that runs perfectly every time, is a virus.