[ Aleksandar095 @ 13.06.2019. 12:47 ] @
Pozdrav, imam problem sa PHP-om, zelim zabraniti pristup Admin Panelu korisnicima koji imaju role="user". Nije mi jasno zasto ovo ne radi i Admin Panelu imaju pristup svi korisnici.

Ima li neko ideju kako ovo mogu popraviti?

Code:

include("../db.php");
session_start();

if ((!isset($_SESSION['a']) || empty($_SESSION['a']))) {

    $sql = "SELECT role FROM users WHERE username='" . $_SESSION['a'] . "'";
    $res = mysqli_query($con, $sql);
    $row = mysqli_fetch_object($res);
    $role = $row['role'];

    if ($role != "admin") {
        header("location: login.php");
    }
}
[ djoka_l @ 13.06.2019. 12:51 ] @
Ulaziš u if ako nije setovana varijabla "a", pa onda tu istu varijablu koristiš kao username.
Šta očekuješ da dobiješ?
[ gost12 @ 13.06.2019. 13:03 ] @
Kod je skroz pogrešan, ali i logika je skroz pomaknuta...
Nikad ne zabranjuješ pristup nekome tko ima neku rolu, to je odmah potencijalna sigurnosna rupa, uvijek gledaš u pogledu da je pristup ZABRANJEN svima, a dozvoliš ga samo korisnicima sa određenom rolom/permissionom.
[ Aleksandar095 @ 13.06.2019. 13:04 ] @
Citat:
djoka_l:
Ulaziš u if ako nije setovana varijabla "a", pa onda tu istu varijablu koristiš kao username.
Šta očekuješ da dobiješ?


Hvala, sad sam video sta sam uradio. Popravio sam gresku.

Code:

if ((!isset($_SESSION['a']) || empty($_SESSION['a']))) {
    header("location: login.php");
} else {
    $sql = "SELECT role FROM users WHERE username='" . $_SESSION['a'] . "'";
    $res = mysqli_query($con, $sql);
    $row = mysqli_fetch_assoc($res);
    $role = $row['role'];

    if ($role != "admin") {
        header("location: login.php");
    }
}
[ Aleksandar095 @ 13.06.2019. 13:06 ] @
Citat:
gost12:
Kod je skroz pogrešan, ali i logika je skroz pomaknuta...
Nikad ne zabranjuješ pristup nekome tko ima neku rolu, to je odmah potencijalna sigurnosna rupa, uvijek gledaš u pogledu da je pristup ZABRANJEN svima, a dozvoliš ga samo korisnicima sa određenom rolom/permissionom.


Pa ja ovde i pokusam dozvoliti pristup samo korisnicima koji imaju role='Admin'
[ Tpojka @ 13.06.2019. 14:17 ] @
Stavljaj `session_start()` odma' u prvu liniju ispod `<?php` taga, uštedićeš sebi živce jednom.
[ Predrag Supurovic @ 14.06.2019. 07:24 ] @
Citat:
Aleksandar095:
Citat:
gost12:
Kod je skroz pogrešan, ali i logika je skroz pomaknuta...
Nikad ne zabranjuješ pristup nekome tko ima neku rolu, to je odmah potencijalna sigurnosna rupa, uvijek gledaš u pogledu da je pristup ZABRANJEN svima, a dozvoliš ga samo korisnicima sa određenom rolom/permissionom.


Pa ja ovde i pokusam dozvoliti pristup samo korisnicima koji imaju role='Admin'


Ono što ti je preporučeno je da stviš nešto kao

Code:

if ($role == "admin") {
    // prikazi sadrzaj
    } else {
        header("location: login.php");
    }



Zašto je to bolje, mislim da je očigledno.


Preporučio bih da kod koji učitava privilegije korisnika bude mnogo ranije, u kodu koji se uvek izvršava i da ti na strani gde treba da proveriš privilegije to već bude pripremljeno tako da samo proveriš privilegije. Ovako kako si krenuo, moraćeš na svakoj strani gde treba da proveravaš privilegije da stavljaš i kod koji učitava privilegije iz baze.