Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Logovanje sa sesijom

[es] :: PHP :: PHP za početnike :: Logovanje sa sesijom

[ Pregleda: 2681 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedja995

Član broj: 309141
Poruke: 55
212.200.84.*



+1 Profil

icon Logovanje sa sesijom24.06.2013. u 13:47 - pre 131 meseci
Pozdrav.
Da li je dobar princip logovanja na sajt da prilikom ispravnog unetog username i passworda ubacim u mysql bazu id sesije korisnika koji je uneo te podatke i na stranice koje su zashticene proveravam da li session_id postoji u bazi ako postoji korisnik je logovan i ima pristup stranici inace ga redirectujem??
poshto sam citao da ima neka veza izmedju sesija i cookia ali ne vidim kako bih to iskoristio??
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.84-48-89.nextgentel.com.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Logovanje sa sesijom24.06.2013. u 16:49 - pre 131 meseci
pogledaj jos malo primere kako se koristi sesija za pracenje korisnika.
Mozes raditi tim principom koji si spomenuo, ali tu gubi svrhu posto nista vise neces postici od obicnog if($_SESSION['is_logged_in']==1)
Sta vise, imaces vise nepotrebnog koda, i teoretski je sporije za jedan upit
Sesija se ne cuva u cookiju, samo se ID sesije cuva u cookie (u 99% slucajeva).
Laicki princip (default) sesije ti je sledeci:
- pokrenes sesiju - server otvori jedan fajl, dodeli mu neki ID i posalje browseru taj ID da ga ovaj sacuva u cookie
- snimas podatke u $_SESSION['podatak'] = 123; - server to zapisuje u gore pomenuti fajl

- svaki sledeci put kad korisnik otvori neku stranu ili dodje na sajt, browser posalje serveru session ID
- server otvori taj fajl i posalje php-u sadrzaj promenjive $_SESSION
a onda ti u kodu nadalje koristis vrednosti te promenjive kako ti odgovara
 
Odgovor na temu

deZio
Inđija

Član broj: 150608
Poruke: 345
*.dynamic.isp.telekom.rs.



+38 Profil

icon Re: Logovanje sa sesijom24.06.2013. u 18:38 - pre 131 meseci
Pogledaj i ovu klasu za čuvanje session-a u bazi:
http://stackoverflow.com/quest...set-session-in-database-in-php
 
Odgovor na temu

Gost




Profil

icon Re: Logovanje sa sesijom26.06.2013. u 14:04 - pre 130 meseci
dakipro ako bi na osnovu podatka sesije is_logged_in odlucivao da li da pustim pristup stranici ili ne da li bi to bilo sigurno???
i imam josh pitanje ali nebi da otvaram novu temu poshto imam previshe pitanja u zadnje vreme mozda samo da dodam u nazivu ove teme CodeIgniter poshto imam pitanje oko sesije u codeIgniteru.
CodeIgniter sesija nije prava php sesija nego poseban sistem ovog FW-a (preslishavam se ispravite me ako greshim :D) da upishe podatke sesije u cookie.
sledece mi nije jasno:
Kreiram sesiju kada unesem dva moja podatka sa $this->session->set_userdata() ?
i na drugi view neki izbacim sa var_dump() sve cookie i ["ci_session"] se menja sa svakim refreshom. kako onda ja da ga koristim ako se stalno menja cemu to???
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.85-200-249.bkkb.no.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Logovanje sa sesijom26.06.2013. u 14:10 - pre 130 meseci
Ima to svoje razloge :)
CI menja taj cookie da bi sprecio/ublazio session hijacking. CI moze da cuva sesiju na vise mesta (fajl, cookie, baza), i sva su manje-vise zasticena i sigurna koliko je to moguce

Ako vec koristis $this->session->set_userdata() onda koristi i $this->session->get_userdata() i probaj da li radi. Ako radi onda ga koristi tako, to je to, ne brini (za sada) o tome.
Mozes i da pogledas neku gotovu biblioteku za login na CI i vidi kako oni to rade.
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
62.240.22.*



+1 Profil

icon Re: Logovanje sa sesijom26.06.2013. u 14:42 - pre 130 meseci
gledao sam vec neke CI login reshenja po netu ali mi se cini da su samo primeri i nisu neshto sigurni koriste te podatke is_logged_in u cookie samo na osnovu toga odredjuju da li ima pristup posetitelj ali ja mislim da bi bolje bio zashticen ako bih napravio kod tipa neki 3249t2489ht892htugsdbgbsdg nasumican i to upishem u cookie i u bazu i u bazi odredim da je admin sa username PEra i npr 'loginKey' = 3249t2489ht892htugsdbgbsdg i onda na svaku zashticenu stranicu pozivam model koji proverava da li se podatak iz cookie-a koji isto moze da se zove npr kriptovano 'loginKey' == sa vrednoscu loginKey polja iz baze ako jeste ima pristup.
npr model bi proveravao da li postoji $this->session->userdata('[kriptovanoLoginKey]') (to bi znaci bio isto neki zajeban string :D 3534634g6t334gsfgdfn634)
i ako postoji da li nosi vrednost 3249t2489ht892htugsdbgbsdg (generisanog stringa pri kreiranju sesije kod logovanja) ako je sve tako vraca vrednost true;
nevidim kako bi mogao taj promenjivi session_id podatak u cookieu da iskoristim?? verovatno neshto nisam dobro shvatio poshto sessije i cookie nikad nisam skroz ukapirao ali ako ima ideju da mi objasni.
i da upravo gledam flexi auth sa CI foruma i vidim da i oni i u cookie i u bazu ubacuju dva generisana stringa prilikom logovanja 'usess_token' i 'usess_series' u user_login_sessions tablu nisam josh stigao da proucim sve kako radi pa ako ima neko ko poznaje ovu skriptu moze da objasni na koji nacin radi
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 01:06 - pre 130 meseci
^^ Razmišljanje ti je dobro i tako nešto je jako fino koristiti kao solidnu zaštitu gde ti sesije ne trebaju, već samo kukiji.
Jedan koji govori da je korisnik gost ili nije gost. $_COOKIE['User'] (guest ili user_name)
Drugi koji govori da li je korisnik ulogovan ili ne ako nije gost $_COOKIE['Access'] (logged/not_logged)
I treći $_COOKIE['Check'] npr. ..

E, taj tebe interesuje, 'ajmo malo o njemu..

Code (php):


# Uzmeš prvo i definišeš nešto..
# Neku čudnu vrednost, samo tebi znanu..
# definišeš je enkodiranu

define("SOME_SECRET_VALUE", 'Oi0p4pmrLeKZqi3ihpIkLeKYui3imLst4pmlLXRlcmNlcy3imaYt4pmjLeKZoC3igKIt4peYLeKXiy3il5kt4pmCLeKZgA==');

# I tek onda kada se poklopi da je user name to i to, password taj i taj.. i kada prva dva kukija dobiju vrednost is_logged i $username
# dolazi na red sledeće
# formatiraj vreme po svome i dodeli $timeStamp-u..
# isto tako i $expiration_time za kolačiće

if($_POST['Login'] === 'ok' && $error == '' && $validation == TRUE) { # whatevs...

$hash_value = sha1(rand(0,500).microtime(). SOME_SECRET_VALUE);
$signature_variant = sha1(SOME_SECRET_VALUE . $hash_value . $timeStamp);
$cookie_CHECK = base64_encode($signature_variant . "-" . $hash_value . "-" . $timeStamp);
file_put_contents('/path/to_/someTempDir/'.$cookie_CHECK, $username, LOCK_EX);
setcookie("Check", $cookie_CHECK, $expiration_time, "/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
setcookie("Access", $isLogged, $expiration_time, "/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
setcookie("User", $username, $expiration_time, "/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
header('Location:'.$_SERVER['REQUEST_URI']); exit;

}

 


DAkle, spakovao si sve to u taj jedan kuki.. i taj jedan je dobio jako "razgovetnu i kratku" vrednost,
te pored toga i jedan fajl u koji je upakovano korisničko ime.. i naziv tog fajla je ustvari vrednost kukija za proveru.
I taj fajl je prisutan samo onda kada se setuje i kuki... i taj fajl se nalazi u ...
pa, znate samo ti i server. :)


Provera ide na sledeći način.. postaviš donji deo koda na pravo mesto... tu gde završavaš "žvakanje i slaganje", dakle, gledaš da je pre Content-type: - headera..

Code (php):


# TimeToGoAway = time() - time(); etc ...

if(isset($_COOKIE['Check'])){

          if(isset($_COOKIE['User'])&&$_COOKIE['User']!='guest'){
               $peakInsideCookie = explode('-', base64_decode($_COOKIE['Check']));
               if($peakInsideCookie[0] !== sha1(SOME_SECRET_VALUE . $peakInsideCookie[1] . $peakInsideCookie[2])){
                   
                    if(file_exists('/path/to_/someTempDir/'.$_COOKIE['Check'])){
                         unlink('/path/to_/someTempDir/'.$_COOKIE['Check'] );
                    }
                   
                    setcookie("Check", '', $TimeToGoAway,"/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
                    setcookie("Access", 'not_logged', $TimeToGoAway,"/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
                    setcookie("User", 'guest', $TimeToGoAway,"/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
                    usleep(654321); header('Location:/some_uri/file.php'); exit;
               }
               
               if($peakInsideCookie[0] == sha1(SOME_SECRET_VALUE . $peakInsideCookie[1] . $peakInsideCookie[2])
                    && !file_exists( '/path/to_/someTempDir/'.$_COOKIE['Check'])){
                    setcookie("Check", '', $TimeToGoAway,"/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
                    setcookie("Access", 'not_logged', $TimeToGoAway,"/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
                    setcookie("User", 'guest', $TimeToGoAway,"/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
                    usleep(654321); header('Location:'.$_SERVER['REQUEST_URI']); exit;}
else{ /*\  All Good ☺ \*/ }}}

 


Inače, sve ovo nema vajde, ukoliko ne narediš da se kukiji postavjaju isključivo i isključivo samo od strane servera, nikako od klijenta.

Dakle, ako nemaš u php.ini fajlu pribeleženo nešto ovako.. i ne setuješ kukije kao što je gore u primeru sa FALSE, TRUE na kraju (FALSE - https/secured ne ukoliko je regularan http; TRUE - http only, da! )

Code:


register_globals = off;
session.use_only_cookies = 1;
session.cookie_httponly = 1;



.. nema svrhe osiguravati se na ovaj način.
U protivnom, jako težak posao za probijanje.

[Ovu poruku je menjao plus_minus dana 27.06.2013. u 02:29 GMT+1]
about:networking
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
62.240.22.*



+1 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 13:19 - pre 130 meseci
hvala mnogo plus_minus na takvom postu :D tako nekako sam zamisljao ali tvoja skripta je josh bolja nego shto sam zamislio.
primenicu to na CodeIgniter ali ce mi biti potrebno manje cookie podataka zato shto pravim samo admin stranicu za par administratora...
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.85-200-249.bkkb.no.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 13:26 - pre 130 meseci
Ako sam ja dobro razumeo ovaj kod, on radi isto kao i default sesija?
Generise random string i snimi ga u cookie i napravi jedan fajl na serveru u koji smesta podatke vezane za taj string?

Ili ima neka zackoljica pa je ovo sigurnije od default sesije $_SESSION ili od CI session biblioteke?
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 13:42 - pre 130 meseci
Da li je sigurnije ili nije, ne bih znao, ja ovo primenjujem u svojim projektima, radi predobro.

U fajlu se upisuje ime korisnika.

Fajl ima naziv same vrednosti kukija.

Onda kada je setovan kuki, tada se kreira i fajl i to su "sijamski blizanci".

Dakle, varijanta da je setovan kuki, ali nije upisan i fajl ili obrnuto - ne postoji kao opcija.

Zapravo, ne treba da postoji kao opcija u kodu.

Pa, ko ume da umesto samog servera na određenom domenu "udene" taj kuki i upiše/napravi novi fajl baš na pravom mestu, u pravom direktorijumu i da se vrednosti unutra,
slože sa SOME_SECRET_VALUE + još 2 delića, jel' da.. taj je - maher.

Hakovao je nalog.

Ja lično, nem' pojma kako bih probio ovako nešto... ok'le da krenem, itd. D:

E, dešava se nekad da je korisnik očistio keš.. i nije se izlogovao. Tada je ostao fajl u tom i tom direktorijumu, bez sijamskog drugara.
Kuki ne postoji, fajl je prisutan. I tako jedan drugi treći.. i napravi se dosta smeća.

Zbog toga, napiše se jedan foreach (GLOB ... itd.. i ako je fajl stariji od toliko i toliko ... unlink.
Eto, to treba dopisati ..

REcimo, dodeli se max. login vreme za svakog korisnika bez obzira na aktivnost od nekih .. 3 ili 4 meseca.. (
Ne znam koliko je ovde na ES-u, kada se uloguješ pa ostaneš prijavljen na dalje.. ) .. onda svaki fajl koji se nalazi u tom direktorijumu i ima više od 3, 4 meseca plus jedan dan - wipe. Delete. Taj je nepotreban. Svi ostali, sklanjaju se automatski.

Unlink pored provere gore ide i pri normalnom logout-u, naravno i nema nekontrolisanog đubreta nigde.


[Ovu poruku je menjao plus_minus dana 27.06.2013. u 14:52 GMT+1]
about:networking
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.85-200-249.bkkb.no.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 13:55 - pre 130 meseci
Koliko ja znam, isto to radi php po defaultu koristeci session_start() i $_SESSION (ili mozda gresim, nisam server expert)
Ako nema neke ocigledne prednosti ne vidim poentu zasto izmisljati toplu vodu pored sistema koji isto to radi vec godinama i testiran je bezbroj puta te integrisan u sam php sa razlogom (i cenim da je mnogo brzi). Plus u $_SESSION mozes da stavis mnogo vise od jednog stringa.

Po istoj logici treba sad praviti custom POST ili GET metode koje ce isto to da rade, mislim da je bolje koristiti alate da se napravi neki proizvod, a ne praviti alate nanovo samo da bi se nesto pravilo.
Ako je pak cilj samo da se vezba i uci onda je to druga stvar
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.85-200-249.bkkb.no.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 14:04 - pre 130 meseci
http://stackoverflow.com/questions/2954879/how-session-works

Citat:

Sessions are made up of two components:

a) Cookie

b) Server-side session data

The cookie usually contains a session id, which references where on the server to get the session data from. The server then uses this session id to fetch the data from the server which is contained inside of a file that has the matching name as the session id.

You can tweak session behavior via the various session_ functions.

answered Jun 2 '10 at 3:57
Jacob Relkin


Sto ce reci, ovaj princip koji vi pominjete je podjednako bezbedan kao i if($_SESSION['is_logged_in']==1)


 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 14:37 - pre 130 meseci
Ja mislim da je ipak bolje samo sa kolačićima, zapravo, meni se tako čini, što ne znači da jeste lošije/bolje, doduše...
Pre svega, na neki način je preciznije. Možeš, a i ne moraš, da prvo definišeš vreme na serveru, isto mu dođe, sa browser - kolačićima.
Naravno, definisana vremenska zona na serveru je - pod obavezno (po meni), ali to mnogi fresh juniori ne znaju, ili ih "bole ona stvar".
Zato je ovo bezbednije, bezbolnije i uvek precizno.

Nisu sesije loše, međutim, zašto bih vezivao neku sesiju, bilo koju.. čitavih.. 9 meseci?
Na nekim mestima, što zavisi od samog koda ili projekta, moraju se ubiti SVE sesije. Dakle, ne samo unset() već i ostalo.
U tom slučaju metoda gore radi bez promena, nema uticaja.

Korisnik nikada nije izlogovan a da on to sam nije učinio na dugme ili obrisao sam svoj keš, bez obzira na promene u backend delu od strane developera.
Što će svaki korisnik skapirati kao pozitivno. To je neko moje mišljenje.

A isto tako, i u ovom slučaju, "xss" developeri ili js/cofee/node majstori, verovatno uvek - dudlaju.

Nema nekog security risk-a ni na jedan a ni na drugi način, kako god obrneš.
Slažem se sa tobom, u svakom slučaju, da ne citiram sad bzvz.
Bezbedno kao i sa sesijama. :)

Pa, ko šta voli.

Da dodam, mišljenja sam takođe, da sesije treba koristiti za bigger things, jer baš kao što reče, sesije mogu da progutaju, ohoho.. :)
A ovo je za kolačić, sasvim super.
about:networking
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
62.240.22.*



+1 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 20:35 - pre 130 meseci
nashao sam zanimljivu skriptu https://github.com/jenssegers/CodeIgniter-Authentication-Library ali nisam je josh proucio skroz ali sam zapazio deo koda koji se nalazi u library/Auth.php na dnu i nisam siguran da li sluzi za ovo ali me je inspirisalo za ovo da se u cookie pri uspeshnom logovanju generiraju dva stringa prvi neka kriptovana vrednost i drugi kriptovana prva vrednost sa nekim algoritmom(moze i da se napravi poseban) pa u funkciji gde je provera da li je cookie validan uzimale bi se te dve vrednosti i prva bi se istim algoritmom kriptovala i uporedjivala vrednost sa drugom to je ja mislim i slucaj u ovoj library za codeigniter ali me opet buni to shto funkcija loggedin() proverava samo cookie podatak auth_loggedin koji moze da bude true ili false. i pitanje jedno da li je $_SESSION['is_logged_in']==1 bezbedno zbog toga shto sesija kriptuje podatke (npr is_logged_in i 1) i stavlja u cookie??
Code:
    

    private function generate_keys() {
        $public = hash($this->hash_algorithm, uniqid(rand()));
        $private = hash_hmac($this->hash_algorithm, $public, $this->ci->config->item('encryption_key'));
        
        return array($public, $private);
    }

    private function validate_keys($public, $private) {
        $check = hash_hmac($this->hash_algorithm, $public, $this->ci->config->item('encryption_key'));
        return $check == $private;
    }
 
Odgovor na temu

Perlicaboss
Lazarevac

Član broj: 277740
Poruke: 30
178.79.60.*



+6 Profil

icon Re: Logovanje sa sesijom27.06.2013. u 22:18 - pre 130 meseci
Nisam nesto posebno strucan ali mozda ti nesto ovako pomogne kad bi ubacio u kod...
Code:

//Izmeniti u config file-u...
$config['sess_expire_on_close'] = TRUE;
//prilikom zatvaranja browser-a brise session,ali koliko sam procitao da nije bas nesto posebno pouzdan,to ces vec morati da potrazis...

// sto se tice refresovanja stranice
$ip=$_SERVER['REMOTE_ADDER'];
$_SESSEION['ip']=$ip;

Nasao sam jedan zanimljiv tekst , pa pogledaj...
http://ellislab.com/codeignite...-guide/libraries/sessions.html
Ali najsigurnije ti je https od svega ovoga...
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Logovanje sa sesijom

[ Pregleda: 2681 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.