[quote=Ozzie PHP]
Veiliger is het om gebruik te maken van de switch constructie
Bob van der Valk
Hoezo is die switch veiliger? want dan kan ik via de adres balk toch overal komen?
Terechte opmerking. Het is niet veiliger.[/quote]
Het is wel degelijk veiliger. Je kunt op deze manier helemaal niet via de adresbalk overal komen. Lees anders de documentatie van 'switch' even door zodat je het principe leer begrijpen.
Waar het in ieder geval op neer komt is dat je moet voorkomen dat iemand klakkeloos pagina's kan aanroepen. Je moet van tevoren definiëren welke pagina's mogen worden aangeroepen.
Dit is ook een optie:
<?php
$allowed_pages = array('pagina1', 'pagina2');
if (in_array($_GET['p'], $allowed_pages)) {
include 'pages/'.$p.'.php';
}
?>
@Chris, hij scant eerst de map waar die daarna op controleert. Zolang hij alleen bestanden in de map heeft staan die geinclude mogen worden is er niks aan de hand.
@Bob, het grootste nadeel bij jouw methode is dat elke keer de map doorlopen wordt. Dit kan een zwaar proces zijn.
Ik weet wat de switch-case inhoudt. Ik blijf er echter bij dat een if-else structuur krachtiger is. Op de manier dat jij het gebruikt uiteraard niet, dan ben je beter af met switch-case. Op de manier dat ik het doe, is het flexibeler. (mits je nog even mijn fout verbeterd)
Je kunt de array $allowed_pages van Ozzie toch ook vullen vanuit je database? dan hoef je je broncode niet steeds aan te passen als je je website uitbreidt.
Bedankt voor het topic, ik heb weer wat beveiliging uit te voeren.
Je kunt de array $allowed_pages van Ozzie toch ook vullen vanuit je database? dan hoef je je broncode niet steeds aan te passen als je je website uitbreidt.
Bedankt voor het topic, ik heb weer wat beveiliging uit te voeren.
Precies! Je krijgt dan het principe van een router en je bent flexibel met het instellen van je urls. Meteen even wat htaccess rewrite toepassen en SEO technisch kun je er ook weer tegen :)
Ja klopt inderdaad zwaar process maar al die pagina's staan achter een login systeem en zodra de sessie niet bestaat kan die pagina ook niet weergegeven worden. Dus vandaar dat ik er niet een allowed pages var inzet. Maar ik denk wel inderdaad dat ik het via een array de pagina's ga doen want dan hoeft ie inderdaad niet steeds de map te doorzoeken.
Je kunt het ook eenmalig doen en de gevonden gegevens in een session stoppen. Dan hoef je niet elke keer de array te updaten als je een nieuw bestand toevoegd. Ik zou wel kijken naar glob() dat is sneller dan dat wat je nu hebt.
Ik zou hem niet in een sessie stoppen. Zodra je dan een bestandje toevoegt zullen "nieuwe" gebruikers die wel kunnen zien, maar oude gebruikers niet. Daarnaast, hoe vaak verandert die data? Je kan makkelijker even een scriptje maken met [php]var_export[/php] dat die array van pagina's genereert en de uitvoer in een PHP bestandje opslaan. Of je maakt dat automatisch zodra dat bestand mist. Voeg je een nieuw bestand toe? Dan delete je dat list-bestandje, en je script genereert hem automatisch opnieuw.
Ik denk niet dat [php]glob[/php] sneller is dan [php]scandir[/php]. glob moet per bestand ook nog kijken of het voldoet aan het argument dat je meegeeft (dat pattern) en zoekt ook in directories. scandir geeft gewoon een lijst van bestanden in die map; het is niet meer dan opendir + readdir. Simpeler kan bijna niet.