Ik ben bezig met een functie voor het checken of gebruikers zijn ingelogd, en of ze de juiste rank hebben.
Ik heb dit gemaakt:
<?
function Secure($pagerank)
{
if(!isset($_COOKIE['md5Username']))
{
exit('U bent niet ingelogd. Gelieve dat eerst te doen.');
}
elseif(isset($_COOKIE['md5username']))
{
$sql = "SELECT * FROM ".$prefix."_users WHERE md5username = '".$_COOKIE['md5username']."'";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows ($res) == 1)
{
while ($row = mysql_fetch_array ($res))
{
if($row['rank'] != $pagerank)
{
exit('U bent niet gemachtigd om deze pagina te kunnen zien.');
}
}
}
}
}
?>
Ziet er wel ok uit, alleen als je aantal rijen wil tellen volstaat alleen het id ook, of in dit geval de rank is weer iets sneller. Voor 1 row hoef je ook geen while lus te doen... waar haal je eigenlijk die prefix vandaan?
Gebruik nooit cookies om iemand in te loggen, die zijn té eenvoudig te onderscheppen en/of na te maken. Een cookie staat tenslotte op de pc van de bezoeker, zelfs m'n moeder kan een cookie aanpassen!
Ga sessies gebruiken en sla eveneens een hash van het ip-adres op. Zodra er dan een ander ip-adres wordt gebruikt, dan is er blijkbaar iemand met het sessie-id vandoor gegaan. Je gooit hem/haar dan direct uit je systeem, uiteraard met een ip-block.
Verder mag userinput (POST, GET, COOKIE) nooit en te nimmer ongecontroleerd in een query worden opgenomen. Dat is vragen om problemen. Gebruik mysql_real_escape_string() om de boel te beveiligen.