Admin vs user

Programovacie jazyky, rady, poradňa...
VIP721
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 242
Registrovaný: 19 jún 2005, 19:42
Kontaktovať používateľa:

Admin vs user

Príspevok od používateľa VIP721 »

Caute vsetci, potrebujem napisat v php funkciu ktora by rozlisovala ci sa prihlasil admin alebo user, mame vyriesene prihlasenie cez session, kde premenne sa posielaju cez $_POST (formular), Predstavujem si to tak ze v tabulke bude stlpec admin, a ak bude hodnota 1 tak sa prihlasil admin a ak bude hodnota 0 tak sa prihlasil user, Zatial mi vsetci odmietali pomoct, trapim sa s tym dostatocne dlho ...
t0m4s3
Admin
Admin
Používateľov profilový obrázok
Príspevky: 18096
Registrovaný: 14 jún 2004, 18:35
Bydlisko: Martin SR, Brno CZ
Kontaktovať používateľa:

Príspevok od používateľa t0m4s3 »

a co ma byt vystupom tej funkcie? Cislo alebo meno?

kazdopadne bude to nejak takto

Kód: Vybrať všetko

function userlevel($kto)
{
$sql = 'SELECT id FROM tabulka WHERE username = "'.$kto.'"';
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

$id = $row['id'];

return $id;
}
mozno su tam "kozmeticke chyby" ale hruby zaklada tam je. Troska viac treba rozpisat problem ;-)
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

najprv urobis dump do databazy a zadefinujes si konstatny ktore budu obsahovat dolezite veci. U_USERNAME, U_USERID, U_USERGROUP a potom neurobis nic ine len zavolas tuto funkciu

Kód: Vybrať všetko

function userIsAdmin()
{
if (U_USERGROUP===1)
{
    return true;
}
return false;
VIP721
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 242
Registrovaný: 19 jún 2005, 19:42
Kontaktovať používateľa:

Príspevok od používateľa VIP721 »

ok chalani nesklamali ste ale dostalo sa mi rychlejsej pomoci.. a hlavne jednoduchsej, aha

Kód: Vybrať všetko

$result = mysql_query("SELECT * FROM user WHERE user='" .
$_SESSION['user']
. "'"); 
$row = mysql_fetch_array( $result );
if($row['admin'] == '1')
{
kod pro admina
}
toto volam v jednoduchosti je krasa
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

imho hovadina. Tak ked robim nejaku vacsiu aplikaciu, tak si pre jej beh vytvorim dobre podmienky. nebudem predsa posielat select na databazu ked chcem vediet ci je user admin alebo nie. preto ho poslem raz, pri updatovani sessions zadefinujem konstanty a vyrobim si funkciu ktora bude univerzalna a nie zakazdym pisat to iste...
VIP721
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 242
Registrovaný: 19 jún 2005, 19:42
Kontaktovať používateľa:

Príspevok od používateľa VIP721 »

Mastermind prepac, ale tvoja rec je ako keby si na mna hovoril po madarsky (madarcinu neovladam), nerozumiem ti s toho ani mäkke F... ale mas pravdu v tom ze je to zdlhave a pomale aj ked lahke na pochopenie. Ty mi hovoris aby som si vytvoril konstanty U_USERNAME a U_USERID... mno to by ma zajimalo naco mi to bude. To co pise tomase, po tom ako som si kusok precital, chapem... on tam pise ako dostat z db ci je $id=1 alebo 0. Neskor je lahke zavolat tuto funkciu a napisat

Kód: Vybrať všetko

if($id==1) { 
echo "kod pre admina";
}
je to aj rychle aj jednoduche. A co sa tyka tvojho, napisem ti to strucne a skus povedat ci je to to co si mi tym chcel povedat....

To U_USERGROUP je kludne stlpec admin, vyberem si udaje z db do pola a s neho vycucnem admin 1 ci 0 a porovnam z konstantou... ono medzi tym co hovorim ja a co hovoris ty je jediny rozdiel.. ja to porovnavam rovno a ty vyuzivas konstantu... myslim si ze zbytocne tam este davat tu konstantu nie je to este tri.
VIP721
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 242
Registrovaný: 19 jún 2005, 19:42
Kontaktovať používateľa:

Príspevok od používateľa VIP721 »

Len tak btw pokusam sa zakomponovat to do tohoto...
sory but session system id copyrighted

//eddited by me
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

nie on hovori aby si funkciu na overenie prav volal iba raz pri prihlaseni a info o tom aky to je uzivatel (bfu/admin) si uchovaval v session a nemusel si zistovat prava pri kazdom kusku kodu ktory sa lisi :wink:
VIP721
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 242
Registrovaný: 19 jún 2005, 19:42
Kontaktovať používateľa:

Príspevok od používateľa VIP721 »

Aha, to je vcelku dobry napad, preco to len nepovedal hned na zaciatku? :P :oops: zacal som na niecom robyt.... Je mi jasne ze sa to bude potom pouzivat neako takto

Kód: Vybrať všetko

if($_SESSOIN['admin']=="1"){
echo"co chcem zobrazovat";"
}
ale nenako mi nejde do hlavy ako bysom to mal z db vybrat. Tipujem ze asi pomocou

Kód: Vybrať všetko

mysql_fetch_array($data)
a este asi budem musiet upravit jeden terajsi riadok na $data = mysql_query("SELECT * FROM `users` WHERE `username`='".$_SESSION[username]."' AND `password`='".$_SESSION[password]."' AND `admin`='".$_SESSION[admin]."'"); //myslim si za takto to dostanem do session

OK teraz to mam v session a viem ako s tym budem pracovat.. ale ako tam zapojit tie konstaty ked uz ich mam definovane?
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

konstanty si nevsimaj :)

popisem to principialne:

Kód: Vybrať všetko

//prihlasovanie.... (poznamka: bfu = bezny franta uzivatel)
--------------------------------------------------------------------
//mam meno a heslo (asi z formulara) a v DB tabulku s nasledujucimi stlpcami (meno, heslo, prava = admina alebo bfu)

mysql_query(najdi mi uzivatela s menom=meno a heslom=heslo);
if(uzivatel existuje)
{
 session_start()
 naplnim si potrebne udaje (meno, ....) do session
 if(je admin) $_SESSION["admin"]=true;
 else $_SESSION["admin"]=false;
}
a idem/presmerujem na nejaku stranku co sa ma zobrazit

//stranka
----------------------------
if($_SESSION["admin"])
{
 kod pre admina
}
else
{
 kod pre bfu
}
VIP721
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 242
Registrovaný: 19 jún 2005, 19:42
Kontaktovať používateľa:

Príspevok od používateľa VIP721 »

a toto mam upne nahradit mojim prihlasovanim alebo len dopisat za prihlasovanie?
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

VIP721 napísal:a toto mam upne nahradit mojim prihlasovanim alebo len dopisat za prihlasovanie?
ehm toto bol princip fungovania ..

proste: prihlasovaci formular -> overenie prihlasenia -> naplnenie session -> stranka -> stranka -> ...

to ako robit formular, overenie, naplnenie session uz musis vediet ty .. ja nepoznam strukturu tvojej db ....
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

ja do session ukladam len oid prihlasenia. prihlasenych uzivatelov logujem do databazy. ak sa raz uzivatel prihlasi, mrsknem ho do tabulky a updatujem kym je online. samozrejme tabulku si precistujem on the fly.
V hlavicke hodim select na databazu, zistim ci je uzivatel prihlaseny. Ak ano updatnem mu udaje a zadefinujem si konstanty ktore mi treba (username, id, opravnenia) a pak pracujem len s nimi.
//add: len doplnim dovod ukladania sessions do databazy. autentifikacia je robena cez ldap, takze si stale o userovi ulozim dolezite informacie a len updatujem tuto session. Nechcel som pri kazdom refreshi posielat ldap request.
programator
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 18 apr 2005, 8:31
Bydlisko: Papua new Guinea
Kontaktovať používateľa:

Príspevok od používateľa programator »

gwixt napísal:konstanty si nevsimaj :)

popisem to principialne:

Kód: Vybrať všetko

//prihlasovanie.... (poznamka: bfu = bezny franta uzivatel)
--------------------------------------------------------------------
//mam meno a heslo (asi z formulara) a v DB tabulku s nasledujucimi stlpcami (meno, heslo, prava = admina alebo bfu)

mysql_query(najdi mi uzivatela s menom=meno a heslom=heslo);
if(uzivatel existuje)
{
 session_start()
 naplnim si potrebne udaje (meno, ....) do session
 if(je admin) $_SESSION["admin"]=true;
 else $_SESSION["admin"]=false;
}
a idem/presmerujem na nejaku stranku co sa ma zobrazit

//stranka
----------------------------
if($_SESSION["admin"])
{
 kod pre admina
}
else
{
 kod pre bfu
}
IMHO tot neni velmi bezpecne, lebo staci len pozmenit session a zrazu si admin...bud teda ako mastermind pisal logovat do databazy alebo si zakazdym overit ci je skutocne admin...
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

programator napísal:IMHO tot neni velmi bezpecne, lebo staci len pozmenit session a zrazu si admin...bud teda ako mastermind pisal logovat do databazy alebo si zakazdym overit ci je skutocne admin...
?? a to mi vysvetli ako by sa ti to podarilo...
t0m4s3
Admin
Admin
Používateľov profilový obrázok
Príspevky: 18096
Registrovaný: 14 jún 2004, 18:35
Bydlisko: Martin SR, Brno CZ
Kontaktovať používateľa:

Príspevok od používateľa t0m4s3 »

gwixt napísal:?? a to mi vysvetli ako by sa ti to podarilo...
takto sa "hackovalo" phpbb az do verzie 2.16, iba si si upravil cookies na ID = 2 co je default admin id a voala :-)
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

t0m4s3 napísal:takto sa "hackovalo" phpbb az do verzie 2.16, iba si si upravil cookies na ID = 2 co je default admin id a voala :-)
cookies a session je imho daco ine (koniec koncov session funguje aj ked su cookies vypnute :wink: ) .. session je ulozene na serveri a kazde spojenie (ip:socket) ma unikatne sessionID (a celu session vlastne) ... jedine ze by sa ti podarilo zmenit si nejako SID na SID aktualne prihlaseneho admina a server ti to zozral .. inak ma nic nenapada
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

jj presne v tom spocivala finta "hackovania" stacilo si v cookie zmenit sessionid...
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

mastermind napísal:jj presne v tom spocivala finta "hackovania" stacilo si v cookie zmenit sessionid...
ale to si najprv musel zistit to sid .... a navyse tu ti to ze si to budes prihlasenych uzivatelov ukladat do DB tiez nepomoze ... tak ako sa to da? a ako sa tomu branit?
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

ako som napisal. do db to ukladam kvoli tomu aby som nemusel pri kazdom refreshi posielat request cez ldap.
Napísať odpoveď