Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Pouze jeden z uživatelů má přístup na určité stránky

Aktivity
Avatar
Michal Koníček:9.3.2018 8:41

Ahoj :),
řeším jeden problém, který spočívá v tom, že musím ošetřit přístup uživatelů na specifickou stránku na jednoho v jeden okamžik. Mám databázi, kde jsou registrovaní uživatelé a databázi s přihlášenými uživateli. Jakmile se uživatel přihlásí do webového rozhraní, zapíše se do tabulky přihlášení jeho jméno a id (autoincrement). Očekávám, že když se uživatel přihlásí, jde mu o to navštívit okamžitě tuto stránku. Takže bych vybral sql dotazem uživatele s nejmenším id a pak bych mu zapsal do další tabulky (sloupce) povolení hodnotu například 1. Pak již stačí abych do podmínky, kde zkoumám jestli je uživatel přihlášen, zjistil i hodnotu v tabulce povoleni, kde se bude zkoumat, jestli má hodnotou 1, jestliže ano, bude moci navštívit tuto stránku. Zároveň jsem nastavil na webu automatické odhlášení, aby nebrzdil nečinný uživatel další uživatele. Jakmile se uživatel odhlásí, z tabulky přihlášení se smaže a tento krok se bude opakovat pro dalšího uživatele.
nějak mě ale můj skript nefunguje.

<?php
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

include "propojeni.php";
session_start();

 $povoleni="1";

 $dotaz = "SELECT Id,Prihlaseny_uzivatel FROM prihlaseni WHERE Prihlaseny_uzivatel='{$_SESSION['prihlaseny_uzivatel']}' AND id='{$_SESSION['id']}' ORDER BY id ASC limit 1";

 $result = $spojeni->query($dotaz);
 if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
     $dotaz2="UPDATE prihlaseni SET povoleni = 1 WHERE povoleni IS NULL";
     $result2 = $spojeni->query($dotaz2);
     $_SESSION['pristup'] = $povoleni;
     echo  "<br /><br /><br /><br /><center><h1><a href=\"index.php\">Vstupte na hlavní stránku a vyberte
     měření</a></h1></center>";
     }
     } else {
     echo"něco je špatně";
     }
    $spojeni->close();
?>

Při spuštění skriptu se ukáže jen, něco je špatně. První dotaz by měl být v pohodě, myslím, že se nechce provést ten zápis. Každopádně si nejsem jist.

a tady je samotná podmínka pro kontrolu přihlášení

if ( ( isset( $_SESSION['prihlaseny_uzivatel'])&& $_SESSION['prihlaseny_uzivatel'] != "") ||
     ( isset( $_SESSION['uzivatelske heslo'])&& $_SESSION['uzivatelske heslo'] != "" )    ||
     ( isset( $_SESSION['pristup'])&& $_SESSION['pristup'] != "" ))
    {
    include "mereni1.php";
    }
    else
        {
      echo "<center><h3>Pouze jeden uživatel může měřit v jeden čas !</h3></center>";
      die();
      }

Nejsem zatím moc sběhlý v programovaní, tak s tím nějak válčím. Pomohl by někdo opravit můj kód ? popřípadě jestliže je tento nápad špatný, je něco praktičtějšího, jak ošetřit přístup jen jednomu uživateli ? Děkuji za pomoc :)

 
Odpovědět
9.3.2018 8:41
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:9.3.2018 15:18

Vypadá to, že v tabulce není žádný záznam vyhoující klauzuli WHERE, koukni se tam.

Editováno 9.3.2018 15:20
 
Nahoru Odpovědět
9.3.2018 15:18
Avatar
Michal Koníček:9.3.2018 18:08

Ano, bylo by lepší použít

WHERE id='{$_SESSION['id']}'

. Zkusil jsem session všude vyměnit na konkrétní hodnoty a proběhlo to vše v pohodě. Nějakým způsobem nemůže načíst ty sečny... nebo to zapisuji ve špatném formátu. Jak jsem hledal na internetu, tak

'{$_SESSION['prihlaseny_uzivatel']}'

by mělo fungovat.

Editováno 9.3.2018 18:08
 
Nahoru Odpovědět
9.3.2018 18:08
Avatar
Odpovídá na Michal Koníček
Marian Benčat:9.3.2018 22:20

Jo, to bude ve spojení se session injection skvělý způsob jak si nechat dropnout databázi.

Nahoru Odpovědět
9.3.2018 22:20
Totalitní admini..
Avatar
Michal Koníček:10.3.2018 13:02

To jsem netušil, že těma sečnama mě může dropnout databáze, ale nenapadá mě jak jinak bych to mohl udělat :/ No zatím mě tam stejně nejdou :/ nějaké nápady ?

 
Nahoru Odpovědět
10.3.2018 13:02
Avatar
Odpovídá na Michal Koníček
Marian Benčat:10.3.2018 13:16

Never ever nevěř uživatelskému vstupu. Navíc PHP u určitém nastavení dovoluje uživateli vnutit sessionID (tj. To session injection). Pokud není jasné stanovené, ze jde o guid - což být stanovené nemusí, tak bys byl schopny tam injectnout SQL.. Musíš escapovat parametry

Editováno 10.3.2018 13:17
Nahoru Odpovědět
10.3.2018 13:16
Totalitní admini..
Avatar
Marian Benčat:10.3.2018 13:18

*oprava ne session injection, ale session fixation

Nahoru Odpovědět
10.3.2018 13:18
Totalitní admini..
Avatar
Michal Koníček:10.3.2018 17:40

Díky :) dneska se mě zadařilo :) nějakým způsobem jsem to dokázal :)

 
Nahoru Odpovědět
10.3.2018 17:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.