Okay ik ben met een soort beveiliging bezig, ik weet er zijn misschien betere manieren, maar dit is voor mensen die niet veel verstand hebben van php.
Ik wil een soort beveiliging inbouwen, maar de output blijft het zelfde
ik wil dit inbouwen
<?php
$ID = $_GET['ID'];
if($_SESSION['Level'] == '9') {
echo "je hebt volledige toegang";
} else {
if($_SESSION['ID'] == $ID) {
echo " Je hebt beperkte toegang";
} else {
echo "Je mag niks";
}
echo "Totaal geen toegan";
}
?>
Maar ik krijg elke keer de laatste output.
Terwijl $_SESSION['Level'] en $_SESSION['ID'] wel gezet zijn
Wat doe ik fout?
[size=xsmall]Toevoeging op 06/06/2022 12:50:35:[/size]
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.
Het verschil tussen beide in de praktijk is dat de bovenste de naam op lijn 6 uit een array haalt (vermoedelijk een database).
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 niet om de statment niet om $_GET, de zelfde manier van beveiliging werkt in de ene page wel en in de andere niet.
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
$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.