Beste Lezers,

Ik loop hier mee een beetje vast..
<?php
$section = "sections/".$_GET['section'];
$page = $_GET['page'];
if (file_exists($section.$page.'.php')) {
include $section.$page;
}else{ ?>
<h3>ERROR 404</h3>
<?php }; ?>


En ik vraag de pagina aan met http://url.nl/?section=home&page=home
Ziet iemand hier wat ik verkeerd doe?

Alvast heel erg bedankt!
Je vraagt nu deze include: sections/homehome.php
Owja natuurlijk!

Hardstikke bedankt!
Hoe ga je dit verder controleren? Want zoals het er nu staat is het lek.
Inderdaad, wat TJVB tvb al zegt. Dit script is zo lek als het maar kan. Je stelt de gebruiker in staat om elk bestand uit de opgegeven map te includen.
Niet alleen uit die map, je kunt alles includen waar het script bij kan.
En als als je ../index gebruikt kom je in een loop (tenminste als index het bestand is waar dit in staat) Je include dan steeds zichzelf.
Zo maak je het veilig:
<?php
$baseDir = __DIR__.'/sections';

// Check op niet ingestelde vars
$section = isset($_GET['section']) ? $_GET['section'] : '';
$page = isset($_GET['page']) ? $_GET['page'] : '';

// Los .. en andere narigheid op
$file = realpath(sprintf("%s/%s/%s.php", $baseDir, $section, $page));

// Check of de file bestaat en of deze onder de baseDir valt
if(file_exists($file) && strpos($file, $baseDir) === 0)
include $file;
else
error404(); // Een foutmelding

// De meest basic 404 melding. Geeft de standaardpagina van de browser weer
// Als je een eigen pagina wil maken, doe dat dan tussen de 2 regels in
function error404() {
header('HTTP/1.0 404 Not Found');
exit;
}
?>
Duidelijk?

Reageren