Tot slot… de hash
Als laatste nog even een kleine aanvulling. Naast het stelen van de sessie id kan een meer ervaren ‘hacker’ ook sessies zelfs wijzigen. Uiteraard is ook de kans dat dit gebeurt zeer klein, maar neem het zekere voor het onzekere! Een mogelijke en simpele oplossing hiervoor is het genereren en opslaan van een hash. Een ‘hash’ is een soort van controle code voor bepaalde data waarmee eenvoudig vast te stellen is of data corrupt is of niet.
Het genereren van de hash:
2
3
4
5
6
7
8
9
10
// start de sessie
session_start();
$sessdata_str = serialize($_SESSION);
$md5hash = md5($sessdata_str);
// opslaan van de hash
$_SESSION[hash] = $md5hash;
?>
Simpel toch? Oh ja… bij het vergelijken van de hash met de sessie data moet je nog even opletten! Er is namelijk een variabele toegevoegd aan de sessie, die niet mee opgenomen is in de hash:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// start de sessie
session_start();
// ip check en overige dingen..
$sessdata = $_SESSION;
unset($sessdata[hash]);
sessdata_str = serialize($sessdata);
$md5hash = md5($sessdata_str);
// controleren van de hash
if ($_SESSION[hash] == $md5hash)
{
// hash komt overeen! Sessie is geldig!!
}
?>
Tot slot dus dit voorbeeldje. Uiteraard zijn er nog talloze andere manieren om sessie nog veiliger te maken, dus mis je hier nog iets dan hoor ik dit graag! Succes met PHP verder!
Daniel Bakker.