Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Kann man diese if-else-include-Abfrage optimieren? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Kann man diese if-else-include-Abfrage optimieren?


 
Truncate
03-08-2006, 17:32 
 
Hallo,

kann man das ev. kürzer machen? Ist auf Nummer sicher aufgebaut,
also nicht bloß include($_GET['go']); und fertig...

if(isset($_GET['go']))

{ if(file_exists("php/".$_GET['go'].".php"))

{

include("php/".$_GET['go'].".php");

}

else

{

include("php/home.php");

}

}

else

{include("php/home.php");}

Das wäre schon wieder unsinnig oder:

if(isset($_GET['go']) && if(file_exists("php/".$_GET['go'].".php"))

 
Abraxax
03-08-2006, 17:49 
 
Original geschrieben von Truncate
Das wäre schon wieder unsinnig oder: wieso?

 
3DMax
03-08-2006, 17:52 
 
Original geschrieben von Truncate
Ist auf Nummer sicher aufgebaut,
also nicht bloß include($_GET['go']); und fertig...

so so, auf nummer sicher.
1. relative pfadangaben sind erlaubt, ala: ../../
2. ist magic_quotes_gpc aus, kann man durch nullbytes sogar dein ".php" austricksen und jede beliebige datei includen

 
Truncate
03-08-2006, 18:03 
 
Original geschrieben von 3DMax 1. relative pfadangaben sind erlaubt, ala: ../../

Gut, das heißt also ich muss $_GET['go'] mittels RegEx überprüfen,
ob nur Buchstaben und Zahlen darin vorkomme, richtig?

Original geschrieben von 3DMax 2. ist magic_quotes_gpc aus, kann man durch nullbytes sogar dein ".php" austricksen und jede beliebige datei includen

Da müßte dann obige RegEx auch ausreichen oder? Ich mein Punkte sind ja dann nicht mehr erlaubt...

 
prego
03-08-2006, 18:11 
 
$valid_sites = array('home','impressum','foo');

if(isset($_GET['go']) AND in_array($_GET['go'], $valid_sites)){
include('../includes/inc.'.$_GET['go'].'php');
}else{
include('../includes/inc.home.php');
}



Ma so als Anstoß.

file_exists kann übrigens nicht die Existenz von entfernten Dateien prüfen.

Von daher müsste man also um was einzuschleusen auf der selben Kiste sein - bei Shared-Hosting aber möglich.


Anmerkung: Diese Funktion kann nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss.
aus: http://de3.php.net/file_exists

 
3DMax
03-08-2006, 18:24 
 
ja, die idee mit dem regex ist gut.

Original geschrieben von Truncate
Da müßte dann obige RegEx auch ausreichen oder? Ich mein Punkte sind ja dann nicht mehr erlaubt...
muss ja nicht unbedingt ein punkt vorkommen:../../../etc/passwd%00
erschlägst du aber trotzdem damit.

pregos vorschlag mit der whitelist ist sehr zu empfehlen. also dateien explizit zu erlauben, anstatt versuchen, die parameter zu bereinigen.

 
Truncate
03-08-2006, 18:29 
 
Gut, danke euch beiden!

Nehme die Array-Variante... weil ich muss die restlichen angehängten Parameter sowieso schon mittels (langsamer) RegEx checken.

 
3DMax
03-08-2006, 18:32 
 
Original geschrieben von Truncate
Nehme die Array-Variante...
ich hätte beide genommen ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:11 Uhr.