Autor | Zpráva | ||
---|---|---|---|
H13 Profil |
#1 · Zasláno: 17. 6. 2006, 12:22:45
Ahoj,
potřeboval bych poradit, zplácal jsem dohromady přihlášení do systému (jsem php těžký amatér). Funguje tak, že se někdo přihlásí do systému a když v něm 20 minut nepracuje, automaticky se odhlásí. Potřeboval bych poradit, zda toto přihlášení nejde udělat jednodušeji, ale hlavně zda je bezpečné (mám samozřejmě na mysli úroveň bezpečnosti např. jaká se používá při přihlášení tady v diskusi, prostě aby nebylo zase tak jednoduché se do systému z venčí dostat) kód:
|
||
Charlie Profil |
#2 · Zasláno: 17. 6. 2006, 15:17:54
Pozměnil bych logiku celého přihlašování:
1) Zkontrolovat čas v _SESSION, když se překročí 20 minut, zničit _SESSION pomocí session_destroy(), refresh (kvůli _SESSION) 2) Zkontrolovat, zda-li je heslo v _SESSION, když ano, tak nepokračovat 3) Když není heslo v _SESSION, zkontrolovat _POST, když heslo souhlasí, zapsat do _SESSION, když ne, nezapisovat. Tohle řešení má dvě výhody: 1) Nesprávné heslo se nezapisuje do _SESSION 2) session_destroy() zničí i session_id() - identifikátor seance. Při dalším požadavku na stránku (refresh) se vytvoří úplně nová seance, nehrozí tedy, že by se do ní dostala data z té staré. S mazáním (unset) proměnných je všeobecně problém, problémový kód by mohl být zde: unset($_SESSION['time']);unset($_SESSION['password']); Když se z nějakého důvodu neprovede druhý příkaz (například kolaps serveru), zůstane tak heslo v seanci, ale čas poslední návštěvy už ne. Váš skript by pak způsobil, že by byl klient přihlášený natrvalo, protože byste neprováděl žádnou kontrolu času - proměnná by totiž neexistovala. Základ bezpečnosti je promyslet všechny možné varianty běhu skriptů a promyslet, co se stane, když nebudou existovat některé z důležitých proměnných. Za bezpečnou stránku se považuje taková stránka, která ukočíruje jakýkoliv vstup (_GET, _POST, _COOKIE), chyby v seancích (_SESSION) a chyby za běhu skriptu nebo nečekané události. Žádná bezpečná stránka by také neměla vyhazovat chybovou hlášku naznačující její strukturu nebo původ chyby - tedy za ostrého provozu je nejlepší nahradit standardní PHP oznamování chyb za vlastní. Takovýchto chybových hlášek mohou využít hackeři k úplnému prolomení Vašich skriptů. |
||
Leo Profil |
#3 · Zasláno: 17. 6. 2006, 16:02:11
Necetl jsem to cele, ale proc heslo zapisovat do session, nechapu? Leo
|
||
H13 Profil |
#4 · Zasláno: 17. 6. 2006, 18:14:00
Necetl jsem to cele, ale proc heslo zapisovat do session, nechapu? Leo Protože, jak jsem uvedl v závorce (jsem php těžký amatér), s php začínám, takže nevím, kam se zapisuje heslo, aby přihlášení bylo platné třeba pro 15 stránek, právě proto se také ptám, jak můj splácaný kód, který plní svoji funkci, zlepšit |
||
H13 Profil |
#5 · Zasláno: 17. 6. 2006, 18:19:04
1) Zkontrolovat čas v _SESSION, když se překročí 20 minut, zničit _SESSION pomocí session_destroy(), refresh (kvůli _SESSION) Tak nějak bych tomu všemu rozuměl a předělám to, jen nerozumím, co přesně znamená refresh, jakým způsobem provede php zvovunačtení stránky? Jinak díky moc, tyhle věci prostě začátečníka nenapadnou |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0