Met als basis een loginscript uit een tutorial heb ik het volgende in elkaar geprutst nou is mijn vraag of dit nu een beetje veilig is.. Kan iemand mij hier wat over vertellen?

checklogin.php
<?php
$gebruikersnaam=$_POST['gebruikersnaam'];
$wachtwoord=$_POST['wachtwoord'];

$gebruikersnaam = stripslashes($gebruikersnaam);
$wachtwoord = stripslashes($wachtwoord);
$gebruikersnaam = mysql_real_escape_string($gebruikersnaam);
$wachtwoord = mysql_real_escape_string($wachtwoord);

$sql="SELECT * FROM Gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' and wachtwoord='".$wachtwoord."'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_start();
$_SESSION['gebruikersnaam'] = $gebruikersnaam;
$_SESSION['key'] = md5($_SERVER['HTTP_ACCEPT_CHARSET'] . $_SERVER['HTTP_ACCEPT_ENCODING'] . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . $_SERVER['HTTP_USER_AGENT']);
session_regenerate_id();
header("location:index.php");
}
else {
header("location:login.php");
}
?>

En dan op bovenaan op de beveiligde pagina's:

<?
session_start();
$chk = @md5(
$_SERVER['HTTP_ACCEPT_CHARSET'] .
$_SERVER['HTTP_ACCEPT_ENCODING'] .
$_SERVER['HTTP_ACCEPT_LANGUAGE'] .
$_SERVER['HTTP_USER_AGENT']);
if ($_SESSION['key'] != $chk) {
header("location:loguit.php");
}
?>

Volgens mij heb ik dan mysqlinjections, session hijacking ed wel redelijk afgevangen maar zijn er nog meer dingen om rekening mee te houden?
misschien ook op IP controleren: $_SERVER['REMOTE_ADRESS'] - óók tegen sessie-hijacking.

Volgens mij is het ook een tikje sneller (doordat je minder gegevens inlaadt, maar veel verschil zal het niet maken als er maar 1 row is) als je niet SELECT * FROM doet, maar bijvoorbeeld SELECT id FROM: Deze kun je dan ook in de sessie opslaan: vind ikzelf makkelijker dan de door de gebruiker ingetoetste gebruikersnaam.
Waarom geen md5() of sha1() bij het password?
Dat moet ik er nog in zetten! Zat te denken aan sha() met een salt...

Reageren