Beste allemaal,
Voor een download database op mijn website heb ik een scriptje in PHP geschreven welke via de $_GET() methode het "id" nummer van een aangeklikte link afvangt. Vervolgens wordt dat "id" nummer gebruikt om het juiste bestand erbij te zoeken. Het script dat ik hiervoor gebruik:
<?php
$id_number = $_GET['id']; // Verkrijg het ID nummer
$date = date('m/d/Y H:i:s', time()); // De datum van vandaag in Nederlandse tijd
$dir = './overzicht/gegevens/'; // Opslag locatie
$browser = $_SERVER['HTTP_USER_AGENT']; // Verkrijg de gegevens van de browser
$ip_adress = $_SERVER['REMOTE_ADDR']; // Verkrijg het IP adres van de gebruiker
$web_adress = array(
//Downloads:
"1" => "./downloads/algemeen/download1.rar",
"2" => "./downloads/algemeen/download2.rar",
//------Download aanvraag verder afhandelen
if (isset($web_adress[$id_number])) // Controleer of het id nummer voor komt in de array index
{
header('Location:' . $web_adress[$id_number]); // Browser doorverwijzen naar het adres uit de lijst
}
else // Bestaat het id nummer niet? Dan een fout melding en maak een logbestand aan...
{
echo "<strong>Error: </strong>" . "The file index: " . "<strong>$url_input</strong>" . " does not exist on this server!"; // Geef foutmelding weer
error_log("[" . $date . "] [Client] " . $ip_adress . " [Fout] Onbekend id nummer: " . $id_number . " [Browser] " . $browser . "\r\n", 3, $dir . "error_log.txt"); // Sla gebeurtenis op in een bestand
}
exit;
//-------------------
?>
Nu kom ik in mijn error_log.txt meldingen tegen van vreemde waardes die niet voldoen als een geldig getal (integer).
Een voorbeeld: in plaats van een verzoek met een geldig getal 1, zijn er vreemde verzoeken geweest met 1'A=0 of -1'.
Hoe kan dat? Komt dit door browsers die een parameter in een url niet goed weten af te handelen of zijn dit verdachte waardes van kwaadwillenden?
Nu kan ik groot en deels oplossen door een filter erop los te laten welke alleen een geldig getal eruit filtert door de <?php
$_GET()
?> methode te vervangen met
<?php
filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
?>
Maar is dit verstandig en veilig om te doen?
Graag hoor ik jullie mening.
26.823 views