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.
$_GET heeft niks met de header te maken. Dat komt uit een URL.
Ik zou zeggen, ga alle variabelen eens na met var_dump() en je ziet wat de inhoud is, en je kan zo achterhalen waarom een statement niet goed uitgevoerd wordt.

Verder is er ook SQL-inejection!!!!
Arno van Zanten op 06/06/2022 13:34:48

Echter werkt de zelfde opbouw in de ene pagina wel, alleen in de andere niet.

Dat kan niet, dus: zoek de verschillen.

Of kopieer de code die wel werkt en werk daarmee verder.
var_dump() geeft geen response
Als user krijg ik op de ID van waar ik mee ingelogt ben geen toegang tot het ID waar ik mee ingelogt ben

[size=xsmall]Toevoeging op 06/06/2022 13:49:24:[/size]

Ward van der Put op 06/06/2022 13:47:41

[quote="Arno van Zanten op 06/06/2022 13:34:48"]
Echter werkt de zelfde opbouw in de ene pagina wel, alleen in de andere niet.

Dat kan niet, dus: zoek de verschillen.

Of kopieer de code die wel werkt en werk daarmee verder.
[/quote]

Heb de code wat in gekort.

<?php
$ID = $_GET['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'];
}
if($_SESSION['Level'] == '9') {
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) {
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>";
}
}
var_dump();
?>
Arno van Zanten op 06/06/2022 13:48:41

var_dump() geeft geen response

Dan doe je iets fout!
En echt... lees de manual over hoe functies werken! Niet gokken en hopen dat het werkt, maar begrijpen hoe het werkt. Het klinkt bot, maar anders kan je net zo goed wat anders gaan doen dan dit.
Admin logt in, kan gewoon overal toegang hebben in de editprofile
User logt in en kan zijn eigen profile niet aanpassen terwijl hij wel dat ID heeft die in de $_SESSIE staat en in de $_GET mee komt
- Ariën - op 06/06/2022 13:46:43

Ik zou zeggen, ga alle variabelen eens na met var_dump() en je ziet wat de inhoud is, en je kan zo achterhalen waarom een statement niet goed uitgevoerd wordt.


Dit, en neem rustig de tijd.
var_dump als user : string(1) "7" NULL
var_dump als admin : string(1) "9" NULL


[size=xsmall]Toevoeging op 06/06/2022 14:00:46:[/size]

Gevonden, bedankt voor de var_dump ;)
- Bestaat je $_GET['ID'] wel? Oftewel: heb je dit in je URL staan: ?ID=
- Wat zegt een print_r() op $_SESSION['Level'] (tussen <pre>-tags voor de leesbaarheid)
- Zorg ook voor preventie tegen SQL-injection.
Is al opgelost, var_dump gaf precies aan wat ik fout had gedaan, en ja het had te maken met de $_SESSION['ID']; die was nog niet aangemaakt. Maar dat is nu opgelost.

Reageren