Willkommen in der Webstatt
User-1 am 05.08.06 10:32

Seas,

wollte nur mal eben fragen obs für dieses kleine Kiddie Script irgendwelche bedenklichen Sicherheitsprobleme gibt


$inc_dir = "inc/";
$file_end = ".inc.php";
$default_include = "inc/projekt.inc.php";

$toinclude = $inc_dir . $_GET['go'] . $file_end;

if(isset($_GET['go']) && file_exists($toinclude)){
include($toinclude);
} else {
include($default_include);
}


Is für ne Hp mit mal 15 Seiten oder so

netcup.de Warum gibt es hier Werbung?
User-2 am 05.08.06 10:45

Sollte nicht, da du ja "inc/" voranstellst und somit schonmal verhinderst, dass eine URL eingebunden wird..

User-1 am 05.08.06 11:01

wunderbar

bin doch ned so blöd wie ich dachte ^^

User-3 am 06.08.06 16:22

Es muss aber nicht immer eine externe Seite eingebunden werden. Dies ist meistens sowieso von der php.ini deaktiviert. Aber was ist wenn jemand ../config.ini%00 oder ähnliches eingibt. xyz-48n gibst du deine Config Datei aus. Besser ist es eine Whitelist zu führen, und dann die eingabe mit der Whitelist zu vergleichen. Die Whitelist kannst du ja trotzdem dynamisch anlegen (glob() hilft dir hier weiter).

User-4 am 06.08.06 17:46

aber in seinem Fall wird ja auch die Endung ".inc.php" vorgegeben! So kann man eigendlich nie auf die Config zugreifen oder?

User-5 am 06.08.06 17:59

du könntest auch überprüfen, ob der dirname von $toinclude wirklich zu dirname(__FILE__ ).'/inc' passt.
dann kannst du dir sicher sein, dass der user dich nicht in en anderen ordner gelockt hat


//edit:
oder du filtest gleich mittels basename alle pfadangaben aus der user eingabe

User-3 am 06.08.06 20:10

Quote
Original von xyz-52
aber in seinem Fall wird ja auch die Endung ".inc.php" vorgegeben! So kann man eigendlich nie auf die Config zugreifen oder?

Falsch. Du hast wohl die %00 an meiner Beispieleingabe übersehen. Das ist eine Binäre Null. Eine Binäre Null schliest jeden String ab, und so fällt das .inc.php unter den Tisch.

User-2 am 06.08.06 21:11

Mhh, also Verzeichnis wechseln mit ".." geht, aber den Trick mit dem Nullbyte konnte ich nicht
reproduzieren.. mein Skriptaufruf: ?go=../blubb.php%00

User-3 am 06.08.06 23:28

Evtl hattest du Magic Quotes GPC o.ä. an, welche das Nullbyte "entschärfen", aber ansonsten funktioniert das prima ;)

yannick@netdirekt:~$ php -f test.php
<?php
readfile(__FILE__);
$querystr = "../config.ini\x00";
include 'foo/'.$querystr.'.inc.php';
?>
Warning: include(foo/../config.ini): failed to open stream: No such file or directory in /home/yannick/test.php on line 4

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt