eeej all ik heb een probleem bij het beveiligen van me member systeem maybe weet iemand raad.
als een persoon zich inlogt dan worden de volgende sessies aangemaakt:
<?php
session_start();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['login'] = $login ;
$_SESSION['memberid'] = $memberid;
$_SESSION['gebruikerniveau'] = $gebruikerniveau;
$serial = serialize($_SESSION);
$md5 = md5(md5(md5($serial)));
$_SESSION['hash'] = $md5;
?>
bij de pagina die ik wil beveiligen heb ik dit gedaan:
<?php
session_start();
if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){
session_destroy();
die('Hacking attempt!');
}else{
if(!isset($_SESSION['memberid']) && !isset($_SESSION['gebruikerniveau'])){
echo ("Om deze pagina te kunnen bekijken moet je ingelogd zijn");
}else{
session_start();
$session_data = $_SESSION;
unset($session_data['hash']);
$serial = serialize($session_data);
$md5= md5(md5(md5($serial)));
if ($_SESSION['hash'] != $md5){
session_destroy();
die('Hacking attempt!');
}else{
/* HIER KOMT DAN DE PAGINA */
}
?>
toch zegt de website steeds 'Hacking attempt!'. Ik heb nog eens gekeken naar de tutorial 'Sessie en veiligheid' maar daar staat het ook zo beschreven. Een echte fout zie ik zo niet. maar misschien zie ik weer wat over het hoofd en kunnen jullie me helpen.
if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){
session_destroy();
die('Hacking attempt!');
}else{
if(!isset($_SESSION['memberid']) && !isset($_SESSION['gebruikerniveau'])){
echo ("Om deze pagina te kunnen bekijken moet je ingelogd zijn");
}else{
$session_data = $_SESSION;
unset($session_data['hash']);
$serial = serialize($session_data);
$md5= md5(md5(md5($serial)));
if ($_SESSION['hash'] != $md5){
session_destroy();
die('Hacking attempt!');
}else{
echo 'Je bent ingelogd';
}
}
}
?>
Dit werkt bij mij...
Je had 2 } te weinig, en een session_start teveel.
Zet voortaan dit boven je scripts:
<?php
error_reporting(E_ALL);
// Geeft alle errors weer die je maar kan krijgen
// Zo zie je precies waar het mis gaat.
?>
ik post maar nog eens de hele beveiligde pagina :):
<?php
session_start();
$sessdata = $_SESSION;
unset($sessdata['hash']);
$sessdata_str = serialize($sessdata);
$md5hash = md5(md5(md5($sessdata_str)));
if ($_SESSION['hash'] != $md5hash){
session_destroy();
die('Hacking attempt!');
}else{
if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){
session_destroy();
die('Hacking attempt!');
}else{
if(!isset($_SESSION['memberid']) && !isset($_SESSION['gebruikerniveau'])){
echo ("Om deze pagina te kunnen bekijken moet je ingelogd zijn");
}else{
if ($gebruikerniveau >= 22){
/* De PAGINA IS DUS HIER */
}
}
elseif ($gebruikerniveau == 0){
echo ('Je acount is gebanned. neem contact op met de web-crew');
}else{
echo ("Je bent niet gemachtigd om deze pagina te bekijken");
}
}
}
}
?>
Wat denk je hier te doen? De boel beter te beveiligen? Je of je 1, 2, 3 of zelfs 100x md5 toepast, de beveiliging wordt er echt niet beter van. Je stopt nog steeds dezelfde $serial in de functie...
Dit is schijnveiligheid. Ga eerst maar eens op zoek naar de zwakste schakel in jouw systeem, webserver en netwerkverbinding en als alles op een hetzelfde niveau is gebracht, ga je pas de lat hoger leggen. Gebruik je bijvoorbeeld wel SSL, heb je een eigen server in gebruik, etc. etc.
Edit: sha1() is trouwens een sterkere beveiliging dan md5().