Restricted pagina's voor admin
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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{
?>
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
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit(); }
?>
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit(); }
?>
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.
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.
Gewijzigd op 18/08/2015 14:10:15 door - Ariën -
Quote:
- 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.