Session a uživatelská skupina – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Session a uživatelská skupina – PHP – Fórum – Programujte.comSession a uživatelská skupina – PHP – Fórum – Programujte.com

 

fix0
Stálý člen
22. 7. 2018   #1
-
0
-

Ahoj všem,

prosím si radu ohledně uživatelské skupiny, myslíte si, že je vhodné, abych při přihlášení uživatele vytvořil session která ponese informaci jakou má uživatelskou skupinu?:

session_start();
$_SESSION['login'] = stripslashes($login);

$_SESSION['login'] = stripslashes($skupina);

Potom bych měl jen na určitých částeh stránky funkce které by se pomocí této session ptala databáze zda má oprávnění například pro přístup ke stránce nebo se stisknutí tlačítka, či odstranění záznamu apod. Funkce by vypadaly jako MáOprávněníOdstranitZáznam($_SESSION['login'], $idZaznamu) nebo kontrola zda se má zobrazit tlačítko, jestli ho má vidět nebo ne MáOprávněníVidětTlačítko($_SESSION['login']), apod.

Nebo se to v praxi řeší jinak? Jak byste to řešily Vy? Upozorňuji, že to nepíši v OOP, ale jako strukturální gulášek, teď toho lituji.

Díky všem za názor, případně radu jak na to jít jinak. Ale názory typu smazat a udělat znovu v OOP bych viděl nerad, protože už je to skoro hotové.

Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
22. 7. 2018   #2
-
+1
-
Zajímavé
fix +

#1 fix
Autorizaci dělám až jako součást SQL dotazu. Pokud někomu změním oprávnění, nemusí se kvůli tomu odhlašovat a zase přihlašovat.

BTW: K čemu je dobré použití funkce stripslashes()?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:818c:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
22. 7. 2018   #3
-
0
-

Hele ani nevím, asi sem to zkopíroval již s example pro přihlašovací formulář. :-D

Jasně udělám to taky tak, před načtením obsahu stránky zavolám nějakou funkci, která složeným dotazem vyčte z DB veškerá oprávnění a podle vyýpisu z DB sestaví stránku, tak, aby to odpovídalo uživatelské skupině uživatele.Díky.

Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
22. 7. 2018   #4
-
0
-

#3 fix
Ono se to dá vložit přímo do toho výpisu - místo dvou SQL dotazů stačí jeden.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:818c:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
22. 7. 2018   #5
-
0
-

#4 Kit
Teď vůbec nevím o čem píšeš, nespletl sis vlákno?

Případně nějaký kod pro ukázku bys prosím neměl?

Jak jsem to napsal já, že to udělám, tak je to špatné řešení?

Jako výpisy mám joinem sloučené uživatele a záznamy které mají vidět, to jo. Tam mám selekci už v dotazu pro výpis.

Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
22. 7. 2018   #6
-
+1
-
Zajímavé
fix +

#5 fix
Do session si po přihlášení uložíš ID uživatele. Nic víc.

Při dotazu na seznam stránek napíšeš ten SQL dotaz asi takto: 

$userId = $_SESSION['userId'];
$sql = "SELECT article.* FROM article
    JOIN user ON article.group_id=user.group_id
    WHERE user.id=$userId";

Předpokladem je, že uživatel je členem maximálně jedné skupiny. Pokud by mohl být ve více skupinách, bude struktura tabulek trochu odlišná a dotaz bude o jeden řádek delší.

BTW: Psal jsem to z hlavy, snad v tom není chyba.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:818c:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4016 příspěvků
23. 7. 2018   #7
-
0
-

Spravne bys mel overovat login a opravneni uzivatele pokazde, kdyz je to kriticky dulezite. Zmeny udaju (UPDATE, DELETE, INSERT) nebo cteni udaju (SELECT), ktere nema jiny uzivatel videt. Idealne vzdy, vsechno.
Napr, aby bezny uzivatel nemohl zjistit prihlasovaci jmeno admina, takze vsechny dotazy, co pristupuji do tabulky uzivatele, napr. Ale mene dulezite muze pro tebe byt, ze se uzivatel dostane k pripravovanemu nezverejnenemu clanku. Ikdyz, tohle by mohlo zas zajimat konkurencni casopis, mohl by clanek vydat driv a ziskat vic prodeju.

Otazkou je, co do session davat.
Muzes tam dat login, psw. Ale, kdyz to bude prohlizet hacker, bude vedet primo login.
Muzes tam davat pseudo-hash, ktery si ulozis do tabulky id_uzivatel, pseudo-hash. To je o neco lepsi, platnost potrva jen dokud je uzivatel prihlasen, nebo das limit 5 min a bud se vygeneruje novy nebo ho to auto-odhlasi. Ale, pokud nekdo sleduje linku, muze stejne podvrhovat akce. Takze by hashe mohla byt soucasti ip a nejake dalsi identifikacni udaje, rozmery okna a jine.

Ja to resim v kazdem programu jinak. Do session davam loginy, hashe. Delam si v php promenou $UZIVATEL. Ale neni to spravne reseni. Spravne by ses mel pokazde zeptat sql. To uz mam take v kritickych programech. Jde o to, ze, pokud se hackerovi podari pres formular obejit nejake kontroly a nastavi si v $UZIVATEL login na admin, skupinu na admin, tak, pokud neoveris i heslo uzivatele, tak mu dovolis treba vytvaret administratory nebo zmenit jinemu uzivateli prava na admina.

Jeste se da udelat superadmin uzivatel. Nekdo, kdo ma login zapsany v externim souboru a vubec ne v db. Pokud nekdo zcizi db, tak tam by mel jen loginy beznych uzivatelu s beznymi pravy.

Nahlásit jako SPAM
IP: 90.176.141.–
fix0
Stálý člen
24. 7. 2018   #8
-
0
-

#6 Kit
Jo, přesně takhle mám výpisy do tabulky, ale výpisy jsou jen jedna část, ale když v tom selectu vypíši více atributů. Akorát v session neuchovávám id, ale login.

Nahlásit jako SPAM
IP: 92.240.177.–
fix0
Stálý člen
24. 7. 2018   #9
-
0
-

#7 peter
Super, díky moc za moc super informací. Taky dělám asi blbost, že do session ukládám něco jako $admin = 1 nebo 0; :-D

Každopádně, na generování hashů apod kašlu, nejde o citlivá data a nechci to s tou bezpečností přehánět.

Nahlásit jako SPAM
IP: 92.240.177.–
peter
~ Anonymní uživatel
4016 příspěvků
27. 7. 2018   #10
-
+1
-
Zajímavé
fix +

S bezpecnosti se neda prehanet. V podstate zadnou nemas, jak to popisujes. Potrebujes tak 75% a mas tak 5% :) Admin=1 zkusi hacker na prvni pokus. Az pak zacne zkouset hesla a tak.

Ted mne jeste napadlo, ze u db je vlastne dobre udelat uzivatele admin, uzivatel, moderator. Pokud muzes delat vlastni uzivatele. Kazdemu dat jina prava pro konkretni tabulky. Pokud bude sql dotaz nad tabulkou, kde nema bezny user prava, tak mu nastaveni admin=1 nebude nic platne, pokud bude v sql prihlaseny jako user z predchozi stranky.  A mas dalsich 10% navic, treba :)

Nahlásit jako SPAM
IP: 90.176.141.–
fix0
Stálý člen
27. 7. 2018   #11
-
0
-

#10 peter

To jo no místo admin tu proměnnou nazvu nejak jinak, třeba opravneni731 :-D Díky za upozornění, to mi vůbec nedošlo. Člověk se musí napřed hackovat, aby věděl web udělat pořádně. :-)

Jinak položit admin rovno 1 mu nepomůže stejně bude muset dosadit do databáze hash s heslem, ale když je to v době, kdy má přístup ke zdrojovým souborům, tak je to hračka.

No když už sme zabředli do tohodle. Chtělo by se ti mě poučit jak by se hacker dostal k tomu aby mohl upravit session?

Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
27. 7. 2018   #12
-
0
-

#11 fix
Pokud tu aplikaci nezvořeš, tak se hacker k modifikaci session nemá jak dostat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:a991:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
28. 7. 2018   #13
-
0
-

Já si taky právě myslím a když zvořu a dostane se k editaci session, tak už stejně název té proměnné přece nehraje roli. Takže mám na salámu. :-) Díky za vysvětlení.

Nahlásit jako SPAM
IP: 92.240.177.–
peter
~ Anonymní uživatel
4016 příspěvků
30. 7. 2018   #14
-
0
-

Lepe pocitat s tim, ze je mozne vsechno a mit zalozni plan :) Pokud ti jde fakt o bezpecnost. Neco necekaneho. Treba nejakou past. Jako, do linku pridat admin=1, ale v programu to ignorovat. Vypsat uzivateli treba jakoze je prihlasen jako admin (aby mel pocit, ze to funguje), ale v programu mu pridelit user prava nebo dokonce guest.

A vubec, nebudu ti psat, ze treba neco nedelam nebo, jak to resim, nikdy nevis, kdo to cte. Nepotrebuji, aby vedel nekdo tak moc informaci o tom, jak moc nebo malo zabezpecuji :)

Nahlásit jako SPAM
IP: 90.176.141.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

Podobná vlákna

Session — založil don_Dominique

Vypršení Session — založil schimpanze

Přičítání session — založil Paja2

Přihlášení session — založil Zuben

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý