Ik ben een beginner met php, alles liep aardig lekker, maar nu is gisteren een website van mij gehacked.
Kunnen jullie misschien mijn script eens bekijken? En me misschien een beetje op de goede weg helpen...?


$goto = (isset($_GET["page"])) ? $_GET["page"] : "main";
if(file_exists("pages/" . $goto . ".inc.php"))
	include("pages/" . $goto . ".inc.php");
else include("pages/404.inc.php");
mogen alle bestanden die in de map pages staan en met inc.php eindigen ge-include worden?

Ik heb niet getest of dit werkt, maar is het niet mogelijk om dit te doen?
include 'pages/../settings.inc.php'; als page=../settings zou zijn.
in dat geval zou ik nog even extra checken op de . in de string.
Weet iemand of dit mag?

En kan je me misschien uitleggen waarom ik dan het beste /settings er tussen kan zetten?
Hoe bedoel je "of dit mag"? Het is een fout in jouw systeem...
Ik bedoel, omdat Hipska zegt "mogen alle bestanden die in de map pages staan en met inc.php eindigen ge-include worden?"

Reageerde ik met weet iemand of dit mag en kan iemand me misschien uitleggen waarom ik dan het beste /settings er tussen kan zetten...
Je leest het volgens mij verkeerd. Hipska bedoelt dat ../settings ertussen zetten de beveiligingsfout kan zijn. Met ../ ga je een map naar boven op de server (bijvoorbeeld van /httpdocs/sitenaam/pages/ naar /httpdocs/sitenaam/). Met een beetje logisch inzicht en geluk (of pech, hoe je het bekijkt), kan je dus bij ?page= in de adresbalk invullen: ?page=../admin/settings. Daarmee zoekt jouw script de pagina httpdocs/sitenaam/admin/settings.inc.php op, en als die niet goed afgeschermd is kan daar bijvoorbeeld een wachtwoord opstaan.

Als je maar een aantal pagina's hebt die je mag bekijken, kan je beter direct opgeven welke toegestaan zijn met een switch(). Ik heb daar in een ver verleden een tutorial over geschreven, maar die nog wel bruikbaar is. Wat wel goed is in jouw script, is dat je geen externe bestanden kan invoeren (bijvoorbeeld ?page=http://www.anderewebsite.nl/kwaadscript, waarmee kwaadscript.inc.php als bestand zou worden uitgevoerd op jouw server).
hanneke, heb je dit wel zelf geschreven.... ?
alweer een tijdje geleden maar ik ga nu eens even bezig met het switch verhaal, kom overal tegen dat dat een betere oplossing is...
of in_array() kan je ook gebruiken. Je hebt dan een array met toegestane pagina's. Zit de opgevraagde pagina in deze array? Oké dan includen we hem..
Chilion schreef op 09.12.2009 14:02
hanneke, heb je dit wel zelf geschreven.... ?


Nogmaals... ?
hanneke schreef op 10.12.2009 11:01
alweer een tijdje geleden maar ik ga nu eens even bezig met het switch verhaal, kom overal tegen dat dat een betere oplossing is...

Reageren