Zo kan je het doen dus alle pagina's die getoont mogen worden in een array neerzetten:
<?php
$array = array('home.php', 'login.php', 'logout.php'); // enz...
if(in_array($_GET['page'], $array)) {
//includen
}
?>
Moet je hier maar even mee knutselen zouw ik zeggen..
edit:
<?php
$arrayP = array('home', 'inloggen', 'uitloggen');
if(!empty($_GET['page'])) {
if(in_array($_GET['page'], $arrayP)) {
if(file_exists($_GET['page'].'.php')) {
include($_GET['page'].'.php');
} else {
include('error.php');
}
} else {
include('error.php');
}
} else {
include('home.php');
}
?>
Alsjeblieft...
[edit]Is nederlands hoor! 100%[/edit]
Link gekopieerd
Mebus, dan krijg je een enorme array, niet handig te onderhouden.
Link gekopieerd
mijn dank is uitermate groot!
Link gekopieerd
Arjan Kapteijn schreef op 24.04.2007 18:31
Mebus, dan krijg je een enorme array, niet handig te onderhouden.
Inderdaad maar voor een paar pagina's is dit opzich niet zo een probleem maar als het er een redelijk aantal zijn dan is jouw oplossing beter:)
Link gekopieerd
Sorry arjan, de site is
www.crimianlsfanaat.nl (Ja ik weet dat jullie er niet blij mee zijn, maar dit is zelf gescript en geen criminals. Deze community gaat omgebouwd worden naar een Algemene PHP / MySQL community)
Link gekopieerd
En als ik
http://en.wikipedia.org/wiki/Remote_File_Inclusion goed lees...
Klopt het dan als ik het goed lees dat het simpel opgelost kan worden door de register_globals off te zetten?
Heeft dit nadelige effecten voor een serveR?
Ik heb het nu al volgt:
<?PHP
if( ($s_lid['strafpunten'] >= 3) OR (ban_controle($bezoeker_ip) == 2) or ($s_lid['gebruiker'] == "Terror1st") ) {
include_once("includes/error_ban.php");
} else {
$page = substr($_GET['page'],0,3);
$page1 = substr($_GET['page'],0,7);
if(!is_file($_GET['page'])) {
//$_GET['page'] = "./home.php";
echo "File bestaat niet";
} else {
if( ($page == "../") OR ($page == "ima") OR ($page == "inc") OR ($_GET['page'] == "./") OR ($_GET['page'] == "../") OR ($page == "../") OR ($page1 == "http://") OR ($_GET['page'] == "/etc/passwd") OR ($_GET['page'] == "style/style.css") ) {
include("errors/error.php"); // Error
} else {
if ( !empty ( $_GET['page'] ) and isset($_GET['page']) ) {
if ( file_exists ( $_GET['page'] ) ) {
include ("".$_GET['page'].""); // Page self
} else {
include("errors/error.php"); // Error
}
} else {
include("home.php"); // Index
}
}
}
}
?>
Dit is de hele verwerking die ervoor zorgt om alles af te vangen, is dit veilig?
Link gekopieerd
Probleem is opgelost,
Als iemand met $_PAGE werkt, dan voordat je dit gaat includen eerste de volgende regels eraan vooraf laten gaan:
<?PHP
$_GET['page'] = str_replace("http://www", "", $_GET['page']); // Geen url toevoegen met www
$_GET['page'] = str_replace("http", "", $_GET['page']); // Geen url toevoegen
$_GET['page'] = str_replace("..", "", $_GET['page']); // Geen map lager
?>
Zou je dit niet gebruiken, dan is het vaak mo gelijk om shells in de site te laden met alle gevolgen van dien.
Link gekopieerd