Vreemde waardes als url parameter

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sandertje -

Sandertje -

09/02/2016 18:16:08
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$_GET
()

?>
methode te vervangen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);

?>


Maar is dit verstandig en veilig om te doen?

Graag hoor ik jullie mening.
Gewijzigd op 09/02/2016 20:33:18 door Sandertje -
 
PHP hulp

PHP hulp

18/04/2024 23:28:09
 
Thomas van den Heuvel

Thomas van den Heuvel

09/02/2016 20:23:23
Quote Anchor link
Waar begint je if-statement ergens? :/

Je zult sowieso op een of andere manier moeten controleren of $id_number een geldige waarde bevat (en of $_GET['id'] uberhaupt bestaat). Anders hoef je niet eens te proberen iemand door te sturen.

Je zou filter_input kunnen gebruiken, maar volgens mij volstaat array_key_exists() (of simpelweg isset()) ook als ik van deze code uitga.

header('Location: ...') redirect je trouwens niet meteen naar de nieuwe locatie.
 
Sandertje -

Sandertje -

09/02/2016 20:48:26
Quote Anchor link
Thomas van den Heuvel op 09/02/2016 20:23:23:
Waar begint je if-statement ergens? :/

Mijn excuses. Het if-statement vergeten mee te kopiëren vanuit mijn script. Ik heb het bericht hierboven gelijk aangepast.

Ik neem aan dat de header('Location: ...') in dit geval nu wel op zijn juiste plek staat. Aangezien er na het if-statement geen verdere opdrachten worden aangeroepen. Of zie ik dit verkeerd?

Toch blijf ik mij afvragen waar die afwijkende waardes in "id" vandaan komen, terwijl ik enkel de volgende url's met de volgende inhoud gebruik: http://www.mijnwebsite.nl/download.php?id=1
Gewijzigd op 09/02/2016 20:49:04 door Sandertje -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.