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

PHP PHP Pouze jeden z uživatelů má přístup na určité stránky American English version English version

Aktivity (1)
Avatar
Michal Koníček:9. března 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. března 8:41
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:9. března 15:18

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

Editováno 9. března 15:20
 
Nahoru Odpovědět 9. března 15:18
Avatar
Michal Koníček:9. března 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. března 18:08
 
Nahoru Odpovědět 9. března 18:08
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Michal Koníček
Marian Benčat:9. března 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. března 22:20
Totalitní admini..
Avatar
Michal Koníček:10. března 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. března 13:02
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Michal Koníček
Marian Benčat:10. března 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. března 13:17
Nahoru Odpovědět  +1 10. března 13:16
Totalitní admini..
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:10. března 13:18

*oprava ne session injection, ale session fixation

Nahoru Odpovědět 10. března 13:18
Totalitní admini..
Avatar
Michal Koníček:10. března 17:40

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

 
Nahoru Odpovědět 10. března 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.