Sessie beveiling doet niet wat het moet doen
Ik wil een soort beveiliging inbouwen, maar de output blijft het zelfde
ik wil dit inbouwen
Code (php)
Maar ik krijg elke keer de laatste output.
Terwijl $_SESSION['Level'] en $_SESSION['ID'] wel gezet zijn
Wat doe ik fout?
Toevoeging op 06/06/2022 12:50:35:
PS: het gaat erom dat als een gebruiker ingelogt is en die heeft een sessie level lager dan 9 moet hij alleen dat mogen doen van zijn eigen id.
dat is de bedoeling, want in de adres bar van je brouwser komt de hele link te staan met de id, dus als je de id veranderd, moet hij aangeven dat je daar geen toegang toe hebt.
Als je goed kijkt, als je geen level 9 hebt moet hij kijken of je wel de sessie id hebt waar je wel toegang toe hebt
Gewijzigd op 06/06/2022 12:59:41 door - Ariën -
Toevoeging op 06/06/2022 13:02:05:
$_SESSION['ID'] deed hij het wel, maar ik als admin moet tot alles toegang hebben, dus bouwde ik de $_SESSION['Level'] extra erbij in, zodat hij eerst kijkt of de persoon het gewenste level heeft, zoniet kijk of hij wel de juiste id heeft waar hij wel toegang toe heeft.
Zonder $_SESSION['Level'] deed ie het, maar als admin kon ik niet bij andere komen waar ik ook toegang toe moet hebben.
De controle $_SESSION['ID'] == $ID is overigens een los statement in je else van je $_SESSION['Level'] == '9' statement.
Persoonlijk zou ik geen levels in een sessie opslaan. Als je iemand level verlaagt, dan blijft die in zijn sessie bestaan tot hij uitlogt. Voor zulke dingen zou ik beter de database gebruiken.
Toevoeging op 06/06/2022 13:04:45:
- Ariën - op 06/06/2022 13:02:28:
Als je de melding: "Totaal geen toegan(g)" ziet, dan is die level 9 niet in de sessie geplaatst.
De controle $_SESSION['ID'] == $ID is overigens een los statement in je else van je $_SESSION['Level'] == '9' statement.
Persoonlijk zou ik geen levels in een sessie opslaan. Als je iemand level verlaagt, dan blijft die in zijn sessie bestaan tot hij uitlogt. Voor zulke dingen zou ik beter de database gebruiken.
PS: sessie level is wel in de sessie mee opgenomen
De controle $_SESSION['ID'] == $ID is overigens een los statement in je else van je $_SESSION['Level'] == '9' statement.
Persoonlijk zou ik geen levels in een sessie opslaan. Als je iemand level verlaagt, dan blijft die in zijn sessie bestaan tot hij uitlogt. Voor zulke dingen zou ik beter de database gebruiken.
PS: sessie level is wel in de sessie mee opgenomen
Toevoeging op 06/06/2022 13:05:48:
Bij een andere pagina gebruik ik hem ook en daar werkt het wel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
if($_SESSION['Level'] == '9') {
echo "<td colspan='4' align='right'><a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a></td>";
} else {
if($_SESSION['Name'] == $info['Name']) {
echo "<td colspan='4' align='right'>You can <a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a> your profile</td>";
} else {
echo "<td colspan='4' align='right'>You cannot edit this profile</td>";
}
}
?>
if($_SESSION['Level'] == '9') {
echo "<td colspan='4' align='right'><a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a></td>";
} else {
if($_SESSION['Name'] == $info['Name']) {
echo "<td colspan='4' align='right'>You can <a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a> your profile</td>";
} else {
echo "<td colspan='4' align='right'>You cannot edit this profile</td>";
}
}
?>
Tipje: Je kan je code ook netter maken door het script in je een <td> te plaatsen.
Dat scheelt weer een hoop herhalen van de zelfde opmaak.
Maar daar gaat het nu niet om, waarom werkt de code bij een andere page wel en bij de andere niet?
Sessie niet aangemaakt?
Gewijzigd op 06/06/2022 13:16:18 door - Ariën -
zoasl ik al zie, die wordt door de header aangeroepen, dus dat is niet het probleem
Log ik in als Admin, dan kan ik alles gewoon doen, log ik in als een user, dan kan ik niks
Dit kan je eenvoudig uitzoeken door simpel debugwerk.
Als admin kan ik wel gewoon alles doen op de page, maar als user niks
Gewijzigd op 06/06/2022 13:22:44 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
if($_SESSION['Level'] == '9') {
echo "<td colspan='4' align='right'><a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a></td>";
} else {
if($_SESSION['Name'] == $info['Name']) {
echo "<td colspan='4' align='right'>You can <a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a> your profile</td>";
} else {
echo "<td colspan='4' align='right'>You cannot edit this profile</td>";
}
}
?>
if($_SESSION['Level'] == '9') {
echo "<td colspan='4' align='right'><a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a></td>";
} else {
if($_SESSION['Name'] == $info['Name']) {
echo "<td colspan='4' align='right'>You can <a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a> your profile</td>";
} else {
echo "<td colspan='4' align='right'>You cannot edit this profile</td>";
}
}
?>
deze niet
Code (php)
en om deze gaat het
En in het tweede komt dit uit $ID, wat eerder uit een $_GET blijkt te komen.
Verder klopt de statement van je laatste code niet. "Totaal geen toegang" is geen opzichzelfstaande statement. Die wordt ALTIJD uitgevoerd bij je else. Dus als Level geen 9 is, dan krijg je te zien: 'Totaal geen toegan(g)'
Het gaat er niet om of de session_start() wel of niet geladen wordt, die wordt in de header geladen.
Alles staat in de sessie.
Echter werkt de zelfde opbouw in de ene pagina wel, alleen in de andere niet.
log ik in als user, dan mag ik totaal niks aanpassen, ook niet waar ik toegang zou moeten hebben, log ik als admin in, kan overal bij
Maar toch vraag ik mij af: Waarom gebruik je $_GET in een inlogsysteem? Dat is hetzelfde als de sleutel buiten in het slot steken als je weggaat?
Hier de broncode in totaal waar het wel werkt.
info.php
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
48
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
48
<?php
$sql = 'SELECT * FROM Info ORDER BY ID DESC';
$result = mysqli_query($connect, $sql);
$details = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
mysqli_close($connect);
echo"
<tr>
<td colspan='7'>";
foreach($details as $info) {
echo" <center>
<table width='800' cellspacing='2px'>
<tr><td>Photo</td>
<td colspan='2'>Info</td>
<td>Personal Info</td></tr>
<tr rowspan='4'>
<td width=100><img src='./img/profile/".$info['Name']."'.jpg width='160'></td>
<td align='left' style='vertical-align:top' width='100px'>Name :<br>Function :<br>Phone :<br>E-mail :<br></td>
<td align='left' style='vertical-align:top' width='200px'>".$info['Name']."<br>".$info['Function']."<br>+31".$info['Phone']."<br>".$info['Email']."<br></td>
<td td align='left' style='vertical-align:top' colspan='5' width='300px'>".nl2br($info['PersonalInfo'],false)."</td>
</tr>
<tr>";
if($_SESSION['Level'] == '9') {
echo "<td colspan='4' align='right'><a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a></td>";
} else {
if($_SESSION['Name'] == $info['Name']) {
echo "<td colspan='4' align='right'>You can <a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a> your profile</td>";
} else {
echo "<td colspan='4' align='right'>You cannot edit this profile</td>";
}
}
echo "
</tr>
</table>
</center>
<p>";
}
echo"
</td>
</tr>
";
?>
$sql = 'SELECT * FROM Info ORDER BY ID DESC';
$result = mysqli_query($connect, $sql);
$details = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
mysqli_close($connect);
echo"
<tr>
<td colspan='7'>";
foreach($details as $info) {
echo" <center>
<table width='800' cellspacing='2px'>
<tr><td>Photo</td>
<td colspan='2'>Info</td>
<td>Personal Info</td></tr>
<tr rowspan='4'>
<td width=100><img src='./img/profile/".$info['Name']."'.jpg width='160'></td>
<td align='left' style='vertical-align:top' width='100px'>Name :<br>Function :<br>Phone :<br>E-mail :<br></td>
<td align='left' style='vertical-align:top' width='200px'>".$info['Name']."<br>".$info['Function']."<br>+31".$info['Phone']."<br>".$info['Email']."<br></td>
<td td align='left' style='vertical-align:top' colspan='5' width='300px'>".nl2br($info['PersonalInfo'],false)."</td>
</tr>
<tr>";
if($_SESSION['Level'] == '9') {
echo "<td colspan='4' align='right'><a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a></td>";
} else {
if($_SESSION['Name'] == $info['Name']) {
echo "<td colspan='4' align='right'>You can <a href='index.php?menu=editprofile&ID=".$info['ID']."'>Edit</a> your profile</td>";
} else {
echo "<td colspan='4' align='right'>You cannot edit this profile</td>";
}
}
echo "
</tr>
</table>
</center>
<p>";
}
echo"
</td>
</tr>
";
?>
En hier de code waar het niet werkt, maar wel de zelfde opbouw
editprofile.php
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
$ID = $_GET['ID'];
if($_SESSION['Level'] == '9') {
$sql = 'SELECT * FROM Info WHERE ID="'.$ID.'"';
$result = mysqli_query($connect, $sql);
$info = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
mysqli_close($connect);
foreach($info as $details) {
$name = $details['Name'];
$function = $details['Function'];
$phone = $details['Phone'];
$email = $details['Email'];
$info = $details['PersonalInfo'];
$id = $details['ID'];
}
echo "<center>
<form action='./inc/replaceinfo.php' method='post'>
<input type='text' name='name' value='".$name."' placeholder='".$name."'><br>
<input type='text' name='function' value='".$function."' placeholder='".$function."'><br>
<input type='text' name='phone' value='".$phone."' placeholder='".$phone."'><br>
<input type='text' name='email' value='".$email."' placeholder='".$email."'><br>
<textarea name='info' rows='25' cols='90'>".$info."</textarea><br>
<input type='hidden' name='ID' value='".$id."' size='92' placeholder='".$id."'><br>
<button type='submit' name='submit'>Edit profile</button><br>
</form>
</center>";
} else {
if($_SESSION['ID'] == $ID) {
$sql = 'SELECT * FROM Info WHERE ID="'.$ID.'"';
$result = mysqli_query($connect, $sql);
$info = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
mysqli_close($connect);
foreach($info as $details) {
$name = $details['Name'];
$function = $details['Function'];
$phone = $details['Phone'];
$email = $details['Email'];
$info = $details['PersonalInfo'];
$id = $details['ID'];
}
echo "<center>
<form action='./inc/replaceinfo.php' method='post'>
<input type='text' name='name' value='".$name."' placeholder='".$name."'><br>
<input type='text' name='function' value='".$function."' placeholder='".$function."'><br>
<input type='text' name='phone' value='".$phone."' placeholder='".$phone."'><br>
<input type='text' name='email' value='".$email."' placeholder='".$email."'><br>
<textarea name='info' rows='25' cols='90'>".$info."</textarea><br>
<input type='hidden' name='ID' value='".$id."' size='92' placeholder='".$id."'><br>
<button type='submit' name='submit'>Edit profile</button><br>
</form>
</center>";
} else {
echo "<center><table><tr><td colspan='7' align='center'><h3>Not allowed</h3></td></tr></table></center>";
}
}
?>
$ID = $_GET['ID'];
if($_SESSION['Level'] == '9') {
$sql = 'SELECT * FROM Info WHERE ID="'.$ID.'"';
$result = mysqli_query($connect, $sql);
$info = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
mysqli_close($connect);
foreach($info as $details) {
$name = $details['Name'];
$function = $details['Function'];
$phone = $details['Phone'];
$email = $details['Email'];
$info = $details['PersonalInfo'];
$id = $details['ID'];
}
echo "<center>
<form action='./inc/replaceinfo.php' method='post'>
<input type='text' name='name' value='".$name."' placeholder='".$name."'><br>
<input type='text' name='function' value='".$function."' placeholder='".$function."'><br>
<input type='text' name='phone' value='".$phone."' placeholder='".$phone."'><br>
<input type='text' name='email' value='".$email."' placeholder='".$email."'><br>
<textarea name='info' rows='25' cols='90'>".$info."</textarea><br>
<input type='hidden' name='ID' value='".$id."' size='92' placeholder='".$id."'><br>
<button type='submit' name='submit'>Edit profile</button><br>
</form>
</center>";
} else {
if($_SESSION['ID'] == $ID) {
$sql = 'SELECT * FROM Info WHERE ID="'.$ID.'"';
$result = mysqli_query($connect, $sql);
$info = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
mysqli_close($connect);
foreach($info as $details) {
$name = $details['Name'];
$function = $details['Function'];
$phone = $details['Phone'];
$email = $details['Email'];
$info = $details['PersonalInfo'];
$id = $details['ID'];
}
echo "<center>
<form action='./inc/replaceinfo.php' method='post'>
<input type='text' name='name' value='".$name."' placeholder='".$name."'><br>
<input type='text' name='function' value='".$function."' placeholder='".$function."'><br>
<input type='text' name='phone' value='".$phone."' placeholder='".$phone."'><br>
<input type='text' name='email' value='".$email."' placeholder='".$email."'><br>
<textarea name='info' rows='25' cols='90'>".$info."</textarea><br>
<input type='hidden' name='ID' value='".$id."' size='92' placeholder='".$id."'><br>
<button type='submit' name='submit'>Edit profile</button><br>
</form>
</center>";
} else {
echo "<center><table><tr><td colspan='7' align='center'><h3>Not allowed</h3></td></tr></table></center>";
}
}
?>
En nu niet zeuren over de $_GET of session_start(), die wordt in de header geladen.
Deze pages worden door een include aangeroepen.
Zelfde opbouw alleen ander variablen, maar de info.php werkt en bij editprofile.php niet.
En mijn vraag is, waarom?
Laat ik $_SESSION['Level'] in editprofile weg, dan werkt het, doe ik die erbij, dan werkt het niet.
Als admin werkt het wel, want ik heb level 9, maar als user niet ik heb dan level 7 maar wel de id waar ik toegang toe moet hebben, maar ook dan mag ik niks.