whitelist vraag
hallo,
ik heb een database met een kolom en die heet: autorisatie. Binnen de autorisatie heb ik vier rollen.
Namelijk: admin, webbeheerder, bieb en lid.
En de vier rollen mogen op bepaalde websites kijken, behalve de admin die mag alle paginas bekijken.
webbeheerder mag admin.php en web.php zien.
bieb mag admin.php en bieb.php zien.
lid mag lid.php en data.php zien.
Hiervoor heb ik een whitelist gemaakt.
het punt is dat de eerste if(webbeheerder) wel werkt maar de twee elseif $bieb en $lid werken niet. Als ik inlog als bieb dan wordt bieb.php niet geopend. en als ik inlog als lid dan wordt lid.php en data.php niet geopend, ik krijg dan de pagina geen_toegang.php te zien, en dit is niet de bedoeling.
Als ik van de twee elseif een if maak dan werkt dit ook niet.
mijn vraag is: hoe moet je een whitelist maken als je inlogt als webbeheerder dat je dan admin.php en web.php zien. Als je inlogt als bieb dat je dan admin.php en bieb.php zien. En als je inlogt als lid dat je dan lid.php en data.php zien.
Alvast bedankt.
de code is:
ik heb een database met een kolom en die heet: autorisatie. Binnen de autorisatie heb ik vier rollen.
Namelijk: admin, webbeheerder, bieb en lid.
En de vier rollen mogen op bepaalde websites kijken, behalve de admin die mag alle paginas bekijken.
webbeheerder mag admin.php en web.php zien.
bieb mag admin.php en bieb.php zien.
lid mag lid.php en data.php zien.
Hiervoor heb ik een whitelist gemaakt.
het punt is dat de eerste if(webbeheerder) wel werkt maar de twee elseif $bieb en $lid werken niet. Als ik inlog als bieb dan wordt bieb.php niet geopend. en als ik inlog als lid dan wordt lid.php en data.php niet geopend, ik krijg dan de pagina geen_toegang.php te zien, en dit is niet de bedoeling.
Als ik van de twee elseif een if maak dan werkt dit ook niet.
mijn vraag is: hoe moet je een whitelist maken als je inlogt als webbeheerder dat je dan admin.php en web.php zien. Als je inlogt als bieb dat je dan admin.php en bieb.php zien. En als je inlogt als lid dat je dan lid.php en data.php zien.
Alvast bedankt.
de code is:
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
//session_start();
include 'connect.php';
$webbeheerder = "SELECT * FROM leden WHERE autorisatie = 'webbeheerder' ";
$bieb = "SELECT * FROM leden WHERE autorisatie = 'bieb' ";
$lid = "SELECT * FROM leden WHERE autorisatie = 'lid' ";
if ($webbeheerder) {
$whitelist = array("/folder/admin.php", "/folder/web.php");
$ip = $_SERVER['SCRIPT_NAME'];
if (in_array($ip, $whitelist)) {
} else {
header("Location: geen_toegang.php");die();
}
}
elseif ($bieb) {
$whitelist2 = array("/folder/admin.php", "/folder/bieb.php");
$ip2 = $_SERVER['SCRIPT_NAME'];
if (in_array($ip2, $whitelist2)) {
} else {
header("Location: geen_toegang.php");die();
}
}
elseif ($lid) {
$whitelist3 = array("/folder/lid.php", "/folder/data.php");
$ip3 = $_SERVER['SCRIPT_NAME'];
if (in_array($ip3, $whitelist3)) {
} else {
header("Location: geen_toegang.php");die();
}
}
?>
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
//session_start();
include 'connect.php';
$webbeheerder = "SELECT * FROM leden WHERE autorisatie = 'webbeheerder' ";
$bieb = "SELECT * FROM leden WHERE autorisatie = 'bieb' ";
$lid = "SELECT * FROM leden WHERE autorisatie = 'lid' ";
if ($webbeheerder) {
$whitelist = array("/folder/admin.php", "/folder/web.php");
$ip = $_SERVER['SCRIPT_NAME'];
if (in_array($ip, $whitelist)) {
} else {
header("Location: geen_toegang.php");die();
}
}
elseif ($bieb) {
$whitelist2 = array("/folder/admin.php", "/folder/bieb.php");
$ip2 = $_SERVER['SCRIPT_NAME'];
if (in_array($ip2, $whitelist2)) {
} else {
header("Location: geen_toegang.php");die();
}
}
elseif ($lid) {
$whitelist3 = array("/folder/lid.php", "/folder/data.php");
$ip3 = $_SERVER['SCRIPT_NAME'];
if (in_array($ip3, $whitelist3)) {
} else {
header("Location: geen_toegang.php");die();
}
}
?>
En dat gaat niet, want lijn 9 t/m 12 zijn niets anders dan strings, die niks uitvoeren.
Je zult ze met mysqli_query() moeten uitvoeren, en dan nog fetchen.
Gezien ik zie dat je er een mooie else-if van maak die feitelijk steeds hetzelfde probeert te doen, maar dan met een andere rol, lijkt het mij zinvoller om dit te verpakken in een aparte functie en een parameter, die je steeds kan aanroepen.
Je zult ze met mysqli_query() moeten uitvoeren, en dan nog fetchen.
Gezien ik zie dat je er een mooie else-if van maak die feitelijk steeds hetzelfde probeert te doen, maar dan met een andere rol, lijkt het mij zinvoller om dit te verpakken in een aparte functie en een parameter, die je steeds kan aanroepen.
Ik kan me haast niet voorstellen dat deze code werkt, maar misschien heb je passages weggelaten.
De eerste if werkt omdat je er een string (tekst) instopt die naar true wordt geëvalueerd.
Die string (een query) voer je echter helemaal niet uit:
De eerste if werkt omdat je er een string (tekst) instopt die naar true wordt geëvalueerd.
Die string (een query) voer je echter helemaal niet uit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$webbeheerder = "SELECT * FROM leden WHERE autorisatie = 'webbeheerder' ";
if ($webbeheerder) {
}
?>
$webbeheerder = "SELECT * FROM leden WHERE autorisatie = 'webbeheerder' ";
if ($webbeheerder) {
}
?>
bedankt voor de info,
kan er een voorbeeld gegeven worden van 'een aparte functie en een parameter, die je steeds kan aanroepen'?
alvast bedankt.
kan er een voorbeeld gegeven worden van 'een aparte functie en een parameter, die je steeds kan aanroepen'?
alvast bedankt.
Wanneer dat trouwens elke keer zou resulteren in het uitvoeren van een query lijkt mij dat niet zo efficiënt.
Als daar sprake van zou zijn dan lijkt mij een mechanisme waarbij je alle privileges die de huidige gebruiker heeft éénmalig (per page access) inlaadt in een soort van user object (of desnoods een array) een beter alternatief. Voor de rest (controle op de pagina zelf) heb je dan in beginsel geen database meer nodig, je kunt dan aan dat object / array refereren en dat vergelijken met de rechten die je nodig hebt om de pagina te bekijken.
Op het moment dat je dat systeem uitbreidt waarbij pagina-informatie ook in de database zit dan kun je al tijdens het opvragen van pagina-informatie controleren of iemand toegang heeft, en anders iemand direct doorsturen naar een 404 pagina of wat dan ook.
Als daar sprake van zou zijn dan lijkt mij een mechanisme waarbij je alle privileges die de huidige gebruiker heeft éénmalig (per page access) inlaadt in een soort van user object (of desnoods een array) een beter alternatief. Voor de rest (controle op de pagina zelf) heb je dan in beginsel geen database meer nodig, je kunt dan aan dat object / array refereren en dat vergelijken met de rechten die je nodig hebt om de pagina te bekijken.
Op het moment dat je dat systeem uitbreidt waarbij pagina-informatie ook in de database zit dan kun je al tijdens het opvragen van pagina-informatie controleren of iemand toegang heeft, en anders iemand direct doorsturen naar een 404 pagina of wat dan ook.




