Hoi,

Ik probeer wat aan te passen in mijn loginscript maar lukt niet helemaal. Het login script werkt perfect maar ik wil dat er bepaalde links alleen zichtbaar zijn als iemand met de 'role' admin is ingelogd. Ik weet eigenlijk niet waar ik moet beginnen, zou iemand mij opweg kunnen helpen? Ik ben helaas nog een beginner met PHP.

Login

<?php
	require('db.php');
	session_start();
    // If form submitted, insert values into the database.
    if (isset($_POST['username'])){
        $username = $_POST['username'];
        $password = $_POST['password'];
		$username = stripslashes($username);
		$username = mysql_real_escape_string($username);
		$password = stripslashes($password);
		$password = mysql_real_escape_string($password);
	//Checking is user existing in the database or not
        $query = "SELECT * FROM `klanten` WHERE username='$username' and password='".md5($password)."'";
		$result = mysql_query($query) or die(mysql_error());
		$rows = mysql_num_rows($result);
        if($rows==1){
			$_SESSION['username'] = $username;
			header("Location: index.php"); // Redirect user to index.php
            }else{
				echo "<div class='form'><h3>Username/password is incorrect.</h3><br/>Click here to <a href='login.php'>Login</a></div>";
				}
    }else{
?>


Auth

<?php
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit(); }
?>

De netste manier zou waarschijnlijk het aanmaken van een user object zijn, die je elke page-access vult vanuit de database op grond van een user id in je sessie.

De snelste manier zou waarschijnlijk het toevoegen van deze rol(len) aan je sessie zijn, waar je op controleert op een soortgelijke wijze als je in "Auth" doet.

In dit laatste geval liggen je rechten/rollen vast gedurende je sessie. Als je deze tussentijds verandert worden deze pas effectief als je opnieuw inlogt.

Als je nieuwe functionaliteit schrijft: gebruik MySQLi of PDO, maar geen mysql_functies meer. Deze gaan op niet al te lange termijn voorgoed verdwijnen.
Waar en hoe defineer je die rollen? Is het een veld in de usertable die aangeeft of iemand admin is?

Verder nog wat opmerkingen:
- De MySQL-functies zijn verouderd, gebruik MySQLi of PDO
- md5() is verouderd om wachtwoorden te crypten. Gebruik liever password_verify en password_hash()
- Een password hoef je niet te escapen met mysql_real_escape_string. Uit het resultaat kan toch geen SQL-injection voortkomen.
- or die() is geen goede afhandeling. Niemand gaat dood als je iets fout doet. Zorg gewoon voor een goede afhandeling met if-else of exceptions als je met classes werkt.
- Een password hoef je niet te escapen met mysql_real_escape_string. Uit het resultaat kan toch geen SQL-injection voortkomen.

Het kan handiger zijn om alle strings te escapen en numerieke waarden te filteren.

Anders moet je je elke keer afvragen als je een niet ge-escapete string ziet of dit:
- vergeten is
- bewust niet gedaan is

Het lijkt mij dan eenvoudiger om deze (wellicht ten overvloede) altijd te escapen.

Reageren