Beste mensen,

Momenteel ben ik bezig om een veilig loginsysteem te bouwen voor een bekende van me. Nu luidt de vraag; is mijn beveiligingssysteem (redelijk) veilig?

- De gebruiker logt in met de gegevens op de loginpagina. Indien alles correct is zal het systeem de sessies aanmaken voor de gebruiker. Één sessie voor het gebruikersid, één voor het ip-adres en één voor de sleutel.

- Op een 'beveiligde pagina' wordt de gebruiker gechecked door middel van de functie die hieronder staat.

Note 1: de inlogpagina is volgens mij wel veilig, maar kan ik op verzoek ook wel even plaatsen.

Note 2: de functie werkt gewoon dus ik test hem wél.

Kortom; is deze functie veilig genoeg?

<?php

function getLevel()
{
if (isset($_SESSION['gebruikersid']) AND !empty($_SESSION['gebruikersid']) AND ctype_digit($_SESSION['gebruikersid']))
{
if (isset($_SESSION['ipadres']) AND !empty($_SESSION['ipadres']) AND $_SESSION['ipadres'] == $_SERVER['REMOTE_ADDR'])
{
if (isset($_SESSION['sleutel']) AND !empty($_SESSION['sleutel']) AND strlen($_SESSION['sleutel']) == 40)
{
$qSelect = mysql_query("SELECT gebruiker_actief
FROM gebruikrs
WHERE gebruiker_id = '". veiligeInvoer($_SESSION['gebruikersid']) ."'
AND inlog_ipadres = '". veiligeInvoer($_SESSION['ipadres']) ."'
AND inlog_sleutel = '". veiligeInvoer($_SESSION['sleutel']) ."'
");

if (mysql_num_rows($qSelect) == 1)
{
$qFetch = mysql_fetch_assoc($qSelect);

if ($qFetch['gebruiker_actief'] == 1)
{
return 1;
}
else
{
verwijderSessies();
return 0;
}
}
else
{
verwijderSessies();
return 0;
}
}
else
{
verwijderSessies();
return 0;
}
}
else
{
verwijderSessies();
return 0;
}
}
else
{
verwijderSessies();
return 0;
}
}

?>

Alvast bedankt.


Met vriendelijke groet,

Kevin de Groot
Jordi kroon op 17/12/2010 14:14:11

waarom allemaal die verwijdersssies(); ?

ik kan het mishebben maar is dat niet overbodig


Anders blijven onnodige sessies rondzweven totdat de browser is afgesloten.
Als men een sessie-waarde zou gaan/kunnen veranderen (via bijv. FF Webdeveloper tool) dan worden de sessies allemaal verwijderd als er ook maar één sessie niet klopt.

Edit: het is nogal een kromme zin, maar waar het op neer komt; als één van de sessies onjuist is, waarom zou je dan de rest van de sessies nog willen bewaren?
Ja maar, nu heb je ook de mysql_real_escape_string geschrapt of zo?
Die zou ik wel laten (behalve voor gebruikersid).
Kris Peeters op 17/12/2010 14:32:52

Ja maar, nu heb je ook de mysql_real_escape_string geschrapt of zo?
Die zou ik wel laten (behalve voor gebruikersid).


Maar ik controleer of die overeenkomt met het ipadres in de if-voorwaarde. En als daar bijv. quotes in zitten dan komen ze niet overeen en zullen de sessies vernietigd worden. Of heb ik het mis?
Daar zou ik toch oppassen.
Het is en blijft data van de client.
$_SESSION['sleutel'] moet nu 40 karakters lang zijn, maar verder wordt niet gecontroleerd.

Als het variabel is en niet numeriek, passeer dan toch best door mysql_real_escape_string.
Ik heb een functie gemaakt genaamd 'veiligeQuery' en die functie kijkt of de functie 'mysql_real_escape_string' bestaat. Zo ja, dan gaat het daardoor heen. Bestaat niet die, dan gaat de string door addslashes.
Ja, maar je gebruikt die precies niet meer in je laatst geposte script.
Nee, dat klopt. Ik bedoelde daarmee dat ik het nu heb toegepast. Sorry.
Okay.

Ik zal zelf eens een login systeem bouwen waar jouw functie (en zelfde db velden) in verwerkt wordt. Zien of ik bedenkingen heb.
Kris Peeters op 17/12/2010 15:41:29

Okay.

Ik zal zelf eens een login systeem bouwen waar jouw functie (en zelfde db velden) in verwerkt wordt. Zien of ik bedenkingen heb.


Laat je het dan even weten? Hehe...
Gezien ik bezig ben een website te bouwen waar veel mensen mee gaan proberen te sjoemelen is een veilig inlogsysteem toch wel van groot belang.

Reageren