Oplossingen
[1] Controleren: wat komt er in
Zorg dat je afvangt wat er binnenkomt, en alleen bestanden die jij hebt opgegeven kan includen. Zorg dat je de files die je wilt includen in een bepaalde map zet en de map opneemt in de include:
Dit maakt de http bug onmogelijk, maar maakt het nog steeds mogelijk om andere bestanden van je eigen site willekeurig te includen.
Bijvoorbeeld als er als $bestand een map als "../../ditbestand.php" opgegeven wordt.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
$map = "htmlbestanden";
$bestand = $_GET['bestand'];
$bestand = preg_replace("/\W/","", $bestand);
// Verwijderd alle niet-alfanumerieke tekens. Hierdoor kan alleen het begin van een filename in de variabele $bestand staan.
include("${map}/${bestand}.extensie");
?>
$map = "htmlbestanden";
$bestand = $_GET['bestand'];
$bestand = preg_replace("/\W/","", $bestand);
// Verwijderd alle niet-alfanumerieke tekens. Hierdoor kan alleen het begin van een filename in de variabele $bestand staan.
include("${map}/${bestand}.extensie");
?>
[2] Het gebruik van readfile() in plaats van include
Door het gebruik van readfile zal elke file enkel als tekst worden gezien, en niet als php gelezen en uitgevoerd worden. Dus wanneer het niet nodig is om php uit te voeren: gebruik readfile()!