in der URL festgelegte Variablen nutzen (z.B. index.php?page=home)

cater

Erfahrenes Mitglied
Hallo,
ich habe PHP und Apache auf Windows installiert (wie hier: http://www.tm-webentwicklung.com/service-wamp-windows-apache-mysql-php-installieren-teil2.php)

Nun wollte ich eine Seite index.php?page=home mit folgendem Inhalt aufrufen:

Code:
<?php include("header.php"); ?>
<?php 

include($page.".php");

 ?>
<?php include("footer.php");?>

(Wie z.B. hier beschrieben: http://www.tutorials.de/tutorials7279.html)

Aber irgendwie übergeht er die in der URL festgelegte Variable. Was mache ich falsch? Wird das in PHP5 nicht mehr unterstützt?
 
Doch, das Funktioniert alles auch in PHP5 noch allerdings und das sollte in einem Tut normalerweise als Hinweis stehen, das dafür die "register_globals" auf "On" stehen müssen (einzustellen in der php.ini)

Also entweder editierst du deine php.ini oder du benutzt das ganze einfach so:

PHP:
<?php include("header.php"); ?>
<?php 

include($_GET[page].".php");

 ?>
<?php include("footer.php");?>

damit umgehst du die "register_globals" sozusagen da diese (auf "On") auch ein Sicherheitsrisiko darstellen kann.
 
Arbeite lieber mit einer Positivliste der erlaubten Werte, die gleichzeitig als Abbildung dient:
PHP:
$allowed = array(
	'foo'     => '/foo.php',
	'bar'     => '/bar.html',
	// …
	'default' => '/default.txt'
);

$page = isset($_GET['page']) ? $_GET['page'] : 'default';
if( !isset($allowed[$page]) ) {
	// unerlaubter Wert
	// sollte möglicherweise protokolliert werden
	$page = 'default';
}
include $allowed[$page];
Der Vorteil der Positivliste ist, dass dadurch Gefahren wie Remote File Inclusion oder Directory Traversal unmöglich sind, da die erlaubten Eingaben und die Abbildung auf die zu verarbeitenden Dateien vorgegeben sind.
 
Vielen Dank für eure Tipps, das werde ich dann auf jeden Fall über eine Positivliste machen. Danke!
 
Zurück