Voorbeeld van een veiligheidslek

Ik zie regelmatig dat mensen iets willen uitrekenen uit een formulier of uit een GET. De opgave laten ze dan in één veld ingeven en PHP mag het dan even uitrekenen. Dat uitrekenen kan je doen met eval(). Echter, dit is een veiligheidslek. Ik laat dit hieronder even zien.

Stel je hebt een script, zoiets als onderstaand.

Als je niet bent ingelogd moet je eerst inloggen. In dit script set ik $_SESSION['id'] even als zijnde het id van de ingelogde gebruiker. Daarna wordt de opgave, in dit geval een vermenigvuldiging, opgehaald uit een GET. De uitkomst wordt berekend met eval(). Onderaan het script wordt nog even het id van de ingelogde gebruiker getoond.

Niets aan de hand met dit soort input:
index.php?opgave=3x5
index.php?opgave=6*9

Maar wat gebeurt er als dit wordt ingegeven?
index.php?opgave=3x5;$_SESSION['id']=200

Dan ben je dus opeens ingelogd onder iemand anders zijn account.


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
session_start();

// even een fake login en de session setten
if(!isset($_SESSION['id']))
{

    $_SESSION['id'] = 100;
}


// de uit te rekenen opgave ophalen
if(isset($_GET['opgave']))
{

    $opgave = $_GET['opgave'];
}

else
{
    $opgave = '3x5';
}


// opgave uitrekenen
eval('$uitkomst=' . str_replace('x', '*', $opgave) . ';');
echo 'Uitkomst is ' . $uitkomst . '<br />';

// het gebruikers-id laten zien
echo 'Gebruikers-ID is ' . $_SESSION['id'] . '<br />';


?>

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Voorbeeld van een veiligheidslek

PHP tutorial opties

 
 

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.