Superglobals
Voordat we beginnen met het ‘veiliger’ maken van sessies eerst nog even wat basic informatie over veiligheid. In PHP 4.2.0 werden voor het eerst de zogenaamde superglobals geïntroduceerd. Gelukkig heeft Mathieu hierover al een zeer duidelijk artikel geschreven, dat hier ook te lezen is. De reden dat ik dit onderwerp hierbij betrek is simpel, kijk maar eens naar het volgende voorbeeldje:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
// start de sessie
session_start();
// controleer of de gebruiker ingelogd is
if ($login == 1)
{
// ingelogd!
}
?>
// start de sessie
session_start();
// controleer of de gebruiker ingelogd is
if ($login == 1)
{
// ingelogd!
}
?>
Zoals je ziet controleert dit ‘script’ of een gebruiker ingelogd is of niet. Dit gebeurt aan de hand van de sessie variabele $login, toch? Hoewel dit script voor een beginnende PHP’er misschien veilig lijkt zal het voor de iets meer gevorderden direct duidelijk zijn dat $login niet perse een sessie variabele hoeft te zijn. De check is namelijk zeer eenvoudig te omzeilen door het script aan te roepen via: script.php?login=1.
Lijkt me duidelijk, nietwaar? De oplossing is uiteraard net zo simpel als het voorbeeldje zelf. In plaats van het controleren van de variabelen $login, controleren we nu de ‘echte’ sessie variabele $login, door middel van de volgende code:
$_SESSION[‘login’] (of voor php < 4.2.0 HTTP_SESSION_VARS[])
« vorige pagina | volgende pagina »