Konrad Rudolph: includen von Get-Parametern

Hallo Forum,

ich habe folgende Situation: mein CMS bekommt per Get-Parameter ($target) eine Zieldatei übermittelt. Diese Datei wird zuerst von meinem CMS verarbeitet und dann per eval() ausgegeben.

Problem dabei ist natürlich die mangelnde Sicherheit: man kann dem CMS den Parameter vorgaukeln und bekommt auf diese Weise Zugriff auf alle freigegebenen Ordner des Servers.

Zuerst wollte ich daher mit einer Whitelist arbeiten, aber das wird denke ich auf Dauer zu aufwendig.
Gibt es nicht einen Weg, zu verhindern, daß der User dem Request ein weiteres $target anhängt oder dies zumindest zu erkennen?

Gruß,
KonRad -

--
SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
ss:| zu:( ls:$ fo:! de:] va:| ch:? sh:) n4:# rl:? br:& js:| ie:) fl:| mo:|
  1. ich habe folgende Situation: mein CMS bekommt per Get-Parameter ($target) eine Zieldatei übermittelt. Diese Datei wird zuerst von meinem CMS verarbeitet und dann per eval() ausgegeben.

    Gibt es nicht einen Weg, zu verhindern, daß der User dem Request ein weiteres $target anhängt oder dies zumindest zu erkennen?

    Allererste Regel: Man sollte die pösen Puben nicht mit der Nase auf die interessanten Sachen stoßen. Verschleiere die Parameter der URL, verschleiere überhaupt Dein CMS, es braucht niemanden zu interessieren, wie Deine Seiten intern funktionieren. Kurz: Benutze nicht index.php?target=bla, sondern /bla. Infos dazu gibt es im Archiv, zum Beispiel unter http://forum.de.selfhtml.org/archiv/2003/7/53813/#m298552.

    Damit wäre die größte Hürde geschafft. Du kannst im Anschluss noch prüfen, ob sich die Datei innerhalb des Web-Hauptverzeichnisses ($_SERVER["DOCUMENT_ROOT"]) befindet oder ob sich überhaupt Schrägstriche oder doppelte Punkte ("..") in $target befinden. Du kannst auch mit der Dateiendung arbeiten, so daß nur bestimmte Dateien eingefügt werden können.

    Gruß,
      soenk.e

    1. Allererste Regel: Man sollte die pösen Puben nicht mit der Nase auf die interessanten Sachen stoßen. Verschleiere die Parameter der URL, verschleiere überhaupt Dein CMS, es braucht niemanden zu interessieren, wie Deine Seiten intern funktionieren. Kurz: Benutze nicht index.php?target=bla, sondern /bla.

      na klar, das versteht sich von selbst (schon aus ästetischen Gründen), der Aufruf ist gestealthed:
      \\ AddType application/x-httpd-parse .html
      AddType application/x-httpd-parse .php
      Action application/x-httpd-parse "/xxxxx/CGI/cms.php?target="
      ///

      Damit wäre die größte Hürde geschafft. Du kannst im Anschluss noch prüfen, ob sich die Datei innerhalb des Web-Hauptverzeichnisses ($_SERVER["DOCUMENT_ROOT"]) befindet oder ob sich überhaupt Schrägstriche oder doppelte Punkte ("..") in $target befinden.

      das Problem dabei: es dürfen sich sowohl Schrägstriche als auch Doppelpunkte im Pfad befinden, das muß auch so bleiben.

      Du kannst auch mit der Dateiendung arbeiten, so daß nur bestimmte Dateien eingefügt werden können.

      Das ist gut; daran habe ich nicht gedacht, weil mein CMS eh nur HTML und PHP verarbeitet, aber durch den Parameter kann man da ja alles einfügen.

      Gruß,
      KonRad -

      --
      SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
      ss:| zu:( ls:$ fo:! de:] va:| ch:? sh:) n4:# rl:? br:& js:| ie:) fl:| mo:|